Generics Type이란 어떤 타입이든 대응할 수 있도록 해주는 타입으로 T 키워드로 주로 사용됩니다
사용하는 상황
사용하기 전에는 같은 내용이지만 타입이 다르기 때문에 모델을 분리해서 2개를 만들어야 하는 상황이 있을 수 있습니다.
struct StringModel {
let info: String?
func removeInfo() -> StringModel {
return StringModel(info: nil)
}
}
struct BoolModel {
let info: Bool?
func removeInfo() -> BoolModel {
BoolModel(info: nil)
}
}
사용 후
사용 후에는 <Generic Type> 키워드를 사용하여 Generic으로 만들 수 있으며 Generic Type은 원하는 키워드로 대체할 수 있는데 주로 개발자들은 T를 사용하여 개발을 많이 합니다.
struct GenericModel<T> { // T=type
let info: T?
func removeInfo() -> GenericModel {
GenericModel(info: nil)
}
}
Generics으로 뷰 만들기
그 외에도 View 또한 Generics를 이용하여 만들 수 있는데 방법은 다음과 같습니다.
Generics 으로 뷰를 만들기 위해서는 Generics Type 키워드 옆에 :View를 붙여야 하는데 이는 Generics Type으로 들어오는 타입이 View 프로토콜을 준수해야 한다는 것을 의미합니다.
사용 예시
커스텀 뷰를 만들 수도 있는 것을 확인할 수 있습니다.
struct GenericView<T:View>: View { // T타입은 View 프로토콜을 준수해야지만 사용 될 수 있습니다
let content: T
let title: String
var body: some View {
VStack {
Text(title)
content
}
}
}
이후 다음처럼 사용됩니다.
struct ContentView: View {
@StateObject private var vm = GenericsViewModel()
var body: some View {
VStack {
GenericView(content: Text("커스텀 뷰"), title: "새로운 뷰")
}
.padding()
}
}
'SwiftUI' 카테고리의 다른 글
MagnificationGesture 로 확대 축소하기 (0) | 2024.04.14 |
---|---|
@ViewBuilder 로 커스텀 뷰 만들기 (1) | 2024.04.13 |
MatchedGeometryEffect (0) | 2024.04.12 |
@discardableResult 반환값을 무시하게 만들기 (0) | 2024.04.12 |
UIscreen.main will be deprecated 대처하기 (0) | 2024.04.12 |