-
[5주차] Swift 문법 4(일급시민 클로저 기초)iOS프로그래밍기초 2024. 10. 9. 16:05
1. first class object or first class citizen




스위프트에서 함수는 first class object 이다.
- 변수에 함수 자체를 담을 수 있다.
- 함수 파라미터로 넣을 수 있다.
- 함수 리턴으로 함수가 나올 수 있다.
예제)
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) 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)1)
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-함수를 변수에 넣어서 사용할 수 있다.
-변수에 함수를 담아서 다시 호출 할때는 아규먼트 레이블을 넣지 않아도 된다.
2)
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)- 함수의 매개변수로 함수를 받을 수 있다.
- 매개변수 선언 부분을 이런식으로 작성
3)
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)- 리턴으로 함수자체를 리턴할 수 있다.
- decideFun 함수는
1) 매개변수로 x: Bool , bool 타입의 변수x 를 받고
2) 리턴으로 (Int)->Int , int타입을 매개변수로 받고 int타입을 리턴하는 함수타입을 리턴형으로 가진다.
2. 클로저(Closure)


자바스크립트의 화살표 함수, 자바의 람다함수 같이
이름없는 함수 블록을 변수에 넣어서 사용하는것
func add(x: Int, y: Int) -> Int { return(x+y) } print(add(x:10, y:20)) let add1 = { (x: Int, y: Int) -> Int in return(x+y) } print(add1(x:10, y:20)) //주의 error: extraneous(관련 없는) argument labels 'x:y:' in call print(add1(10, 20)) //OK print(type(of:add1)) //과제. (Int , Int) -> Int'iOS프로그래밍기초' 카테고리의 다른 글
[7주차] Xcode 사용법 및간단한 iOS앱 개발 (1) 2024.10.17 [6주차] Swift 문법 5(클래스 failable initialize 상속) (1) 2024.10.10 [4주차] Swift 문법 3 (1) 2024.09.26 [3주차] Swift 문법 2 (0) 2024.09.19 [2주차] swift 문법 1 (1) 2024.09.12