struct widget: Widget {
let kind: String = "widget"
var body: some WidgetConfiguration {
IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
widgetEntryView(entry: entry)
}
.configurationDisplayName("My Widget")
.description("This is an example widget.")
}
}
스위프트로 위젯 익스텐션을 추가 중 특이한 문법을 발견했다.
IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider()) { entry in
widgetEntryView(entry: entry)
}
이 부분인데, 마지막 { entry in widgetEntryView(entry: entry) } 는 대체 뭘까..
스위프트는 전혀 모르지만 그 동안 내가 보아왔던 언어들을 생각해보면
IntentConfiguration(kind: kind, intent: ConfigurationIntent.self, provider: Provider(), content: { entry in
widgetEntryView(entry: entry)
})
이런식으로 생성자 안에는 들어가 있어야 하지 않나 싶었다.
이 문법은 trailing closure, 후행 클로저라고 한다.
마지막 인자가 클로저라면 괄호를 벗어나서 작성해도 된다고 한다.
물론 괄호 안에 써도 상관없다.
func test(f: () -> Void) {
print("테스트")
}
test() {
print("테스트")
}
func test2(f: () -> Void) {
print("테스트2")
}
test2(f: {print("테스트")})
func test3(f: () -> Void) {
print("테스트3")
}
test3 {
}
이렇게 함수를 호출할 수 있다.
특히 마지막 같은 경우는 함수를 기존에 알던 test() 가 아닌, test{} 라고 호출하는 모양이어서 어색하다.