1. 클로저
익명의 함수
함수 이름없이 함수 구현
objc의 block
2. 샘플 코드
// Closure, Lambda, Block, Annonymous Function
// 모두 비슷한 개념
// Closure : 익명의 함수 개념
func Sort(inout ar : Array<Int> , compare : (Int, Int)->Bool)
{
for i in 0...ar.count-2
{
for j in i+1...ar.count-1
{
// if ar[i] > ar[j]
if compare(ar[i], ar[j]) // 사용자가 인자로 결정
{
let temp = ar[i]
ar[i] = ar[j]
ar[j] = temp
}
}
}
}
// Sort에 전달할 비교함수 둘
func cmp1(a:Int, _ b:Int) -> Bool{return a<b}
func cmp2(a:Int, _ b:Int) -> Bool{return a>b}
var x = [1,3,5,6,9,2,4,6,8,10]
print(x)
// inline 클로져 : 함수 ()안에 만드는 것
Sort(&x,compare : cmp1) // 매번 함수를 찾아가서 봐야하니 블럭으로 넘기자(이것이 스위프트 클로저)
Sort(&x, compare: {(a:Int,b:Int)->Bool in return a<b }) // {} 사이에 함수 인자 in 리턴값, 구현이 여러줄이면 세미콜론 여러개 장점:한눈에 알수있음
Sort(&x, compare: {(a:Int,b:Int) in return a<b }) // 리턴문 생략 가능
Sort(&x, compare: {(a,b) in return a<b }) // 타입 생략 가능
Sort(&x, compare: {a,b in return a<b }) // 소괄호도 생략 가능
Sort(&x, compare: {a,b in a<b }) // 리턴도 생략 가능
Sort(&x, compare: {$0 < $1 }) // 약속된 언어
Sort(&x, compare: <) // 2개인것도 추론 가능하기 때문에 다 뺌
// trailing 클로져 : 함수()안이 아닌 ()밖에 클로져를 만드는 표현식, 마지막 인자만 가능
Sort(&x) {$0 < $1 }
print(x);
// 클로저와 타입 - swift에서 클로져는 결국 함수
func foo(num:Int)
{
let f = { (a: Int, b:Int)->Int in return a+b+num} // num도 쓸수있다
showType(f)
print(f(1,2))
}
'교육 > Swift' 카테고리의 다른 글
[swift] 구조체와 클래스 (0) | 2016.08.05 |
---|---|
[swift] enum (0) | 2016.08.05 |
[swift] 함수 고급 (0) | 2016.08.04 |
[swift] 제어문 (0) | 2016.08.04 |
[swift] 반복문 (0) | 2016.08.04 |