iOS
[iOS 앱 개발] Swift 클로저(Closure), 후행 클로저
Dokon Jang
2022. 9. 16. 10:44
반응형
자바 .Net에서 람다식(Lambda) 즉 익명함수로 알고 있던 것이 Swift에서는 클로저(Closure)라고 합니다.
클로저를 사용하면 코드는 간결해지지만, 불필요하게 사용하면 가독성이 떨어질 것 같습니다.
람다식을 거의 사용하지 않고 있지만, Swift에서는 친숙해지기로 했습니다.^^
클로저 표현식 구문
{ (파라미터) -> 리턴타입 in
실행 구문
}
파라미터와 리턴이 없는 경우
var hello = {() -> Void in
print("Hello")
print("World")
}
hello()
파라미터는 있고, 리턴이 없는 경우
var hello = {(name:String) -> Void in
print("Hello")
print(name)
}
hello("Korea")
파라미터와 리턴이 있는 경우
var hello = {(name:String) -> String in
return "Hello " + name
}
print(hello("Korea"))
함수를 정의하여 배열 정렬
var names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func sortArray (s1:String, s2:String) -> Bool {
// 오름차순(ASC) : s1 < s2
// 내림차순(DESC : s1 > s2
return s1 > s2
}
names.sort(by:sortArray)
print(names)
클로저 함수를 정의하여 배열 정렬
var names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var sortArray = {(s1:String, s2:String) -> Bool in
return s1 < s2
}
names.sort(by:sortArray)
print(names)
후행 클로저
마지막의 파라미터가 클로저 인 경우만 후행 클로저를 사용할 수 있다.
func f(a:Int, b:Int, cal:(Int, Int) -> Int) -> Int{
return cal(a, b)
}
var value : Int
value = f(a:1, b:2, cal:{(_a:Int, _b:Int) -> Int in return _a + _b})
// 후행 클로저
value = f(a:1, b:2){
(_a:Int, _b:Int) -> Int in
return _a * 2 + _b * 2
}
print(value)
배열의 sort 함수의 파라미터로 클로저를 사용해서 정렬
var names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
// 전체 클로저 표현식
names.sort(by:{(s1:String, s2:String) -> Bool in return s1 < s2})
// 파라미터타입 추론
names.sort(by:{(s1, s2) -> Bool in return s1 < s2})
// 리턴타입 추론
names.sort(by:{(s1:String, s2:String) in return s1 > s2})
// 파라미터타입, 리턴타입 추론
names.sort(by:{(s1, s2) in return s1 < s2})
names.sort(by:{s1, s2 in return s1 < s2})
// 후행 클로저
names.sort(){
(s1, s2) in return s1 < s2
}
print(names)
반응형