[arcjeen] 5. swift closure
클로저(Closure)
일회용 함수를 작성할 수 있는 구문. 일회용 함수란 한번만 사용할 구문들의 집합이면서 그 형식은 함수로 작성되어야하는 제약 조건이 있을 때 만들어 사용 할 수 있는 함수이다.
일회용 함수는 굳이 함수의 이름을 작성할 필요없이 생략된다는 점에서 익명 함수라고 부르기도 한다.
objective -c의 블록과 같은 개념.
또는 자바 파이썬의 람다함수.
표현식
func 키워드를 생략하며 함수의 이름 또한 생략한다.
{ (매개변수) -> 반환타입 in
구문
}
{ ( ) -> () in
print("i am closure");
}
{ () -> Void in
print("i am closure")
}
//상수나 변수에 클로저표현식을 할당 후 실행
let f = { () -> Void in
print("i am closure");
}
f();
//상수나 변수에 할당 하지 않고 실행
({ (s1:Int s2:String) -> void in
print("\(s1), \(s2)")
})(1,"closure")
일반 함수를 closure로 변경하는 예제
let value = [1, 9, 5, 7, 3, 2];
//내림차순 정렬
func order(s1:Int, s2:Int) -> Bool {
if s1 > s2{
return true;
}else{
return false;
}
}
value.sorted(by:(order));
//closure 식으로 변환
value.sort( { (s1:Int, s2:Int) -> Bool in
if s1> s2{
return true;
}else{
return false;
}
});
//closure식을 한줄로 변환
sorted(by: { (s1:Int, s2:Int) -> Bool in return s1 > s2 });
//비교구문은 자동으로 return형을 Bool형으로 간주하기때문에 bool 생략