반응형
자바 .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)
반응형
'iOS' 카테고리의 다른 글
[iOS 앱 개발] Swift 다형성(protocol, class) 예제 코드 (1) | 2022.09.20 |
---|---|
[iOS 앱 개발] Swift 구조체/클래스 if 절 비교를 위한 "==" 연산자 구현 (1) | 2022.09.19 |
[iOS 앱 개발] Swift 함수(func) (0) | 2022.09.06 |
[iOS 앱 개발] Swift Dictionary (0) | 2022.09.05 |
[iOS 앱 개발] Swift Set (0) | 2022.09.02 |
댓글