IOS앱개발

ios앱개발 5주차

taeho1630 2024. 10. 9. 22:07

swift의 함수는 1급 객체(1급 시민)이다.

 

1급 개체 조건

 

1.변수에 저장할 수 있다.

 

  - 함수를 데이터  타입처럼 처리 가능

 

2.매개변수로 전달할 수 있다.

 

    - 매개변수로 함수를 받으려면, 받게 될 함수는 함수의 데이터 타입을 선언한다.

 

3.리턴값으로 사용할 수 있다.

 

실습

func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up
print(up(num:10))
print(toUp(10))
let toDown = down
func upDown(Fun: (Int) -> Int, value: Int) {
let result = Fun(value)
print("결과 = \(result)")
}
upDown(Fun:toUp, value: 10) //toUp(10)
upDown(Fun:toDown, value: 10) //toDown(10)

1) toup이라는 변수에 up이라는 함수가 저장된다. 따라서 toup을 호출하면 up의 num+1이 호출된다.

 마찬가지로 todown 변수에 down 함수가 저장되어 todown을 호출하면 down의 num-1이 호출된다.

 

2) Fun: 은 upDown 매개변수 toup이라는 함수를 전달한다 이로 인해 value값의 10에 toup를 호출하게되어 11이 출력된다.

Fun: 은 upDown 매개변수 todown이라는 함수를 전달한다 이로 인해 value값의 10에 toup를 호출하게되어 9이 출력된다.

11
11
결과 = 11
결과 = 9

 

func decideFun(x: Bool) -> (Int) -> Int {
//매개변수형 리턴형이 함수형
if x {
return toUp
} else {
return toDown
}
}
let r = decideFun(x:true) // let r = toUp
print(type(of:r)) //(Int) -> Int
print(r(10)) // toUp(10)

3) decideFun 함수는 bool 매개변수의 값에 따라 toup 또는 toDown 함수를 반환한다. x의 값이 true이기에 toUp을 반환하여 r에 저장한다.

(Int) -> Int
11

 위의 코드의 결과

 

클로저 : 특정 작업(함수)과 그 작업이 일어난 곳(환경 또는 상태)을 모두 기억하고 있는 도구

 

클로저 표현식은 매개변수를 받거나, 값을 반환하도록 만들 수 있다.

 

클로저 표현식 : {(<매개변수 이름>: <매개변수 타입> -> <반환타입> in }

func add(x: Int, y: Int) -> Int {
	return(x+y)
    }
    print(add(x: 10, y: 20))
    print(type(of:add))

add를 이용해서 호출할 때에는 x:, y:을 붙어야한다.

let add1 = {(x: Int, y: Int) -> Int in
	return(x+y)
}
print(add1(10, 20))
print(type(of:add1))

하지만 위의 코드의 add1로 호출시에는 x:, y:을 붙일 시 오류가 생긴다.(클로저 표현식)

30
(Int, Int) -> Int
30
(Int, Int) -> Int

위 두개의 코드의 결과값이다(과제로 add와 add1의 타입을 확인하는 코드를 사용하여 알아보았다)

func mul(val1: Int, val2: Int) -> Int
{
return val1 * val2
}
let result = mul(val1:10, val2:20)
print(result)

실습 예제 문이다.

let multiply = {(val1: Int, val2: Int) -> Int in
	return val1 * val2
}
let result = multiply(10, 20)
print(result)

위의 실습 예제문을 클로저 표현식으로 바꾸게되면 위와 같이 바꿀수 있다.

200

위 두개의 코드 실행 결과값이다. 

'IOS앱개발' 카테고리의 다른 글

iOS 프로그래밍 기초 7주차  (1) 2024.10.17
iOS 앱 개발 6주차(1010)  (0) 2024.10.10
iOS 프로그래밍 기초 4주차(0926)  (0) 2024.09.30
2주차  (0) 2024.09.12
ios 앱 개발 1주차 ( 09 / 05)  (1) 2024.09.05