안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
이번 포스팅에서는 swift 3 Closure 클로저에 대해 공부합니다.
클로저는 코드의 블록으로 일급시민입니다.
우리가 앞서 배웠던 함수도 클로저의 일종입니다.
이름이 있는 클로저를 함수라고 지칭합니다.
선언 예 { (매개변수 목록) -> 반환타입 in // TODO } 반환타입의 생략은 불가능합니다. 반환 값이 없을 경우 Void 를 선언합니다. 예제) // 함수 func sumFunc(a:Int, b:Int) -> Int { return a+b } var sumVar : Int = sumFunc(a:100, b:200) print(sumVar) // 300 // 클로저 var sumClosure : (Int, Int) -> Int = { (x:Int, y:Int) -> Int in return x + y } // (Int, Int) -> Int 클로저 표현입니다. sumVar = sumClosure(100,200) print(sumVar) // 300 처음에 언급한 것처럼 함수는 클로저의 일종이기 때문에 sumClosure 변수에 함수를 할당할 수도 있습니다. sumClosure = sumFunc(a:b:) |
함수의 전달인자로서의 클로저 ex) 사칙연산 let add : (Int, Int) -> Int add = { (a:Int, b:Int) -> Int in return a+b } let subtract : (Int, Int) -> Int subtract = { (a:Int, b:Int) -> Int in return a-b } let divide : (Int, Int) -> Int divide = { (a:Int, b:Int) -> Int in return a/b } func cals( a:Int, b:Int, functions : (Int, Int) -> Int { retrurn functions(a,b) }) var cal : Int cal = cals(a:200, b:100, method : add) print(cal) // 300 cal = cals(a:200, b:100, method : subtract) print(cal) // 100 cal = cals(a:200, b:100, method : divide) print(cal) // 2 // multiply 자바의 익명 구현 객체처럼 따로 만든 클로저를 값으로 주는 게 아니라 호출 시점에 코드 블록을 넣어줘도 됩니다. cal = cals(a:200, b:100, method : (x:Int, y:Int) -> Int in { return x * y } |
클로저 단순화 - 후행 클로저 - 반환 타입 생략 - 단축 인자 이름 - 암시적 반환 표현 func cals( a:Int, b:Int, functions : (Int, Int) -> Int { retrurn functions(a,b) }) var example : Int //기본 사용 example = cals(a:100, b:200, functions : (x:Int, y:Int) -> Int in { return x+y }) // 후행 클로저 - 클로저가 함수의 마지막 전달 인자일 경우 마지막 매개 변수의 이름일 생략하고 함수의 소괄호 외부에 클로저를 구현할 수 있습니다. example = cals(a:100, b:200) { (x:Int, y:Int) -> Int in return x+y } // 반환 타입 생략 - cals 함수의 functions 매개 변수는 Int 타입을 반환한다는 것을 컴파일러도 알고 있습니다. 때문에 클로저에서 반환 타입을 명시해주지 않더라도 상관 없습니다. * in 키워드는 생략할 수 없습니다. example = cals(a:100, b:200, method(x:Int, y:Int) in { return x + y }
// 후행 클로저와 반환 타입 생략을 동시에 사용할 수 있습니다. example = cals(a:100, b:200) { (x:Int, y:Int) in return x + y } // 단축 인자 이름 - 클로저의 매개 변수이름이 굳이 필요하지 않다면 단축 인자 이름을 사용할 수 있습니다. 단축 인자 이름은 매개 변수의 순서에 따라 $0, $1, $2 ... $n 으로 표현합니다. example = cals(a:100, b:200, method : { return $0 + $1 } // 단축 인자 이름도 후행 클로저와 같이 사용할 수 있습니다. example = cals(a:100, b:200) { return $0 + $1 } // 암시적 반환 표현 - 클로저가 반환하는 값이 있을 경우 클로저의 마지막 줄의 값을 암시적으로 반환 값으로 취급합니다. example = cals(a:100, b:200) { $0 + $1 } |
클로저의 단순화까지 공부해봤는데요.
클로저의 단순화의 경우 너무 축약할 경우 다른 사람이 알아보기 힘들어 질 수 있으므로
적당히 하는 것을 추천드립니다 ㅎㅎ
이상입니다.
다음 포스팅에서는 프로퍼티에 대해 공부합니다~
'Swift3(스위프트3)' 카테고리의 다른 글
swift3 스위프트3 상속 (0) | 2017.07.07 |
---|---|
swfit3 스위프트3 프로퍼티와 감시자 (0) | 2017.07.06 |
swift3 스위프트3 값 타입과 참조 타입 - Value Type VS Reference Type (0) | 2017.07.05 |
swift3 스위프트3 열거형 enum (0) | 2017.07.04 |
swift3 스위프트3 구조체(struct)와 클래스(class) (0) | 2017.07.04 |