\. closure(인줄 알았던..)

Posted on 2022-03-21 by GKSRUDTN99
Swift&Xcode Swift

예제 먼저 확인해보겠습니다.

struct TestStruct { 
    let haha = "haha"
    let hoho = "hoho"
}

func testClosure(_ closure: (TestStruct) -> String) {
    print(clousre(TestStruct()))
}

testClosure(\.haha) // "haha"
testClosure(\.hoho) // "hoho"

closure가 1개의 인자를 받아 특정 연산을 거치지 않고 .(dot) chain만으로 리턴할 때, 예제와 같이 줄여서 쓸 수 있습니다.

closure 축약의 한 형태라고 생각할 수 있습니다.

Swift의 closure 축약에 대해서 대강 알아보자면,

testClosure { testStruct -> String in 
    return .haha
}

위에서, 매개변수를 쓰는 대신 1 등의 기호를 이용해 아래와 같이 축약할 수 있습니다.

testClosure { $0.haha }

마지막으로, 매개변수가 1개인 경우 $0도 줄여서 \.으로 사용합니다.

testClosure(\.haha)

8.17 추가

이번에 KVO(Key-Value Observing)과 KVC(Key-Value Coding)을 공부하면서,

\.으로 표시한 Closure는 단순히 $0.haha를 줄인 것이 아니라,

KeyPath를 Closure로 넘겨주는 방식이라는 것을 알게 되었습니다.

KVO와 KVC에 관한 포스팅은 조만간 진행하도록 하겠습니다. 감사합니다.

...
이짐구    May 18, 2022, 4:29 p.m.

댓글 남기고갑니다 ㅎㅎ

Updated: May 18, 2022, 4:29 p.m.

...
Anonymous    Oct. 7, 2022, 4:06 p.m.

제목이 웃기네요ㅋㅋㅋㅋㅋ
잘 읽었습니다.