728x90
SwiftUI를 처음 시작하면 some 키워드를 접할 수 있습니다.
View가 struct라는 것은 알겠는데 앞에 붙은 some이 어떤 역할을 하는 것인지 알아보겠습니다.
struct ContentView: View {
var body: some View {
Text("jsng is here!")
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
some keyword는 Swift에서 Opaque Types에 해당합니다.
직역하면 불투명한 타입입니다.
Opaque Type은 함수나 메서드의 반환 타입을 가리는 역할을 합니다.
특정한 타입을 반환하지 않고 프로토콜이나 프로토콜을 준수하는 타입을 반환합니다.
Opaque Type을 이용하면 이런 경우가 가능합니다.
Shape라는 protocol을 구현한 Triangle 구조체는 shapeName 메서드를 가지고 있습니다.
getMyShape 함수는 반환형을 Triangle이 아닌 some Shape로 하여 Shape를 구현하는 것을 반환시킬 수 있습니다.
그리고 그 함수를 호출한 myShape는 shapeName 메서드를 호출할 수 있는 것입니다.
protocol Shape {
func shapeName() -> String
}
struct Triangle: Shape {
func shapeName() -> String {
return "Triangle"
}
}
func getMyShape() -> some Shape {
Triangle()
}
let myShape = getMyShape()
print(myShape.shapeName())
some View라는 Opaque Type을 사용하는 이유
struct ContentView: View {
var body: some View {
Text("jsng is here!")
.padding()
}
}
결과적인 이유는 View는 Protocol입니다. 그래서 View 자체를 반환형으로 지정하려면 some이 들어가야 하는 것입니다.
어떤 구조체가 UI 요소로 사용될 수 있다는 것을 보장하는 방법으로 View protocol을 구현함으로써 보장합니다. 이 Protocol을 반환형으로 효율적으로 이용한 것으로 볼 수 있습니다.
Reference
https://docs.swift.org/swift-book/LanguageGuide/OpaqueTypes.html
'iOS > iOS' 카테고리의 다른 글
[iOS, concurrency] publishing changes from background threads is not allowed; (0) | 2021.11.25 |
---|---|
[iOS] GCD, multithreading in iOS (0) | 2021.11.25 |
[Swift] Struct 그리고 Class (0) | 2021.10.26 |
iOS 📱 개발에 유용한 사이트 정리 (0) | 2021.09.23 |