현제의 현재이야기

[swift] 기초 문법 6일차(클로저) 본문

IOS/swift

[swift] 기초 문법 6일차(클로저)

현재의 현제 2022. 9. 13. 22:46

클로저

let add : (Int, Int) -> Int
add = { (a: Int, b: Int) in
    return a + b
}
func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
    return method(a, b)
}

print(calculate(a: 50, b: 40, method: add))

var calculated : Int

calculated = calculate(a: 50, b: 40, method: { (left: Int, right: Int) -> Int in
    return left + right
})

print(calculated)

// 90 90

함수에 인달인자로 많이 사용된다. 문법이 함수랑 비슷해서 헷갈릴 수도 있다.

 

다양한 표현

let add : (Int, Int) -> Int
add = { (a: Int, b: Int) in
    return a + b
}
func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
    return method(a, b)
}

var calculated : Int

calculated = calculate(a: 50, b: 40, method: { (left: Int, right: Int) -> Int in
    return left + right
})

calculated = calculate(a: 50, b: 40) { (left: Int, right:Int) -> Int in
    return left + right
}

calculated = calculate(a: 50, b: 40) { (left: Int, right: Int) in
    return left + right
}

calculated = calculate(a: 50, b: 40){
    return $0 + $1
}

calculated = calculate(a: 50, b: 40){ $0 + $1 }
print(calculated)

이렇게까지 축약될 수 있는데... 과연 어디다가 쓰는 걸까?

퀴즈로 안 것

func plus(a: Int, b: Int) -> Int {
  return a + b
}

let add: (Int, Int) -> Int = [빈칸]

빈칸에

 

이것 중에서 { $0 + $1 }이 들어가면

이놈과 같은 놈이 된다. 그리고 함수에 (a:b:)같은 놈들을 안 넣어줘도 잘 실행된다. +) int와 같은 타입도 생략이 가능하다.

+ 클로저 반환타입에 void가 들어가는 경우는 return이 없을 때이다.

 

'IOS > swift' 카테고리의 다른 글

[swift] 기초 문법 8일차(상속)  (0) 2022.09.15
[swift] 기초 문법 7일차(프로퍼티)  (0) 2022.09.14
[swift] 기초 문법 5일차  (0) 2022.09.12
[swift] 기초 문법 4일차  (0) 2022.09.11
[swift] 기초 문법 3일차  (0) 2022.09.10
Comments