같은 내용의 struct를 새로 만드는 대신 다른 이름의 struct를 하나 만드는 것 입니다
사용해야되는 상황
넷플릭스같은 앱을 만든다고 했을 때 영화 모델이 필요할 것입니다.
struct MovieModel {
let title: String
let director: String
let count: Int
}
struct ContentView: View {
@State var item: MovieModel = MovieModel(title: "Title", director: "Yoon", count: 5)
var body: some View {
VStack {
Text(item.title)
Text(item.director)
Text("\(item.count)")
}
}
}
이후 tv 프로그램을 만든다고 했을 때 해당 프로그램도 영화 모델을 똑같이 사용할 것입니다.
struct TVModel {
let title: String
let director: String
let count: Int
}
struct ContentView: View {
@State var item: TVModel = TVModel(title: "TV Title", director: "KIM", count: 10)
var body: some View {
VStack {
Text(item.title)
Text(item.director)
Text("\(item.count)")
}
}
}
typealias 사용하지 않았을 때 문제점
위에서 확인되는 것은 분명 title, director, count 전부 중복됩니다. 그러므로 구조체는 완전 같지만 이 중복되는 코드를 그대로 사용하게 되면 아래처럼 간결한 코드를 만들지 못하게 됩니다.
struct MovieModel {
let title: String
let director: String
let count: Int
}
struct TVModel {
let title: String
let director: String
let count: Int
}
struct ContentView: View {
@State var item: MovieModel = MovieModel(title: "Title", director: "Yoon", count: 5)
@State var item: TVModel = TVModel(title: "TV Title", director: "KIM", count: 10)
var body: some View {
VStack {
Text(item.title)
Text(item.director)
Text("\(item.count)")
}
}
}
typealias 사용 후
만약 typealias 를 사용하여 코드를 만들게 된다면 다음과 같이 TVModel 를 직접 구현하는 일이 사라집니다. typealias 는 아래와 같이 같은 구조의 구조체를 새로 만드는 대신 같은 구조인 다른 이름의 구조체를 하나 만드는 것 입니다.
struct MovieModel {
let title: String
let director: String
let count: Int
}
typealias TVModel = MovieModel
struct ContentView: View {
@State var item: TVModel = TVModel(title: "TV Title", director: "KIM", count: 10)
var body: some View {
VStack {
Text(item.title)
Text(item.director)
Text("\(item.count)")
}
}
}
typealias을 이용한 completionHandler: @escaping
func downloadData(completionHandler: @escaping DownloadCompletion) {
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
let result = DownloadResult(data: "New Data!")
completionHandler(result)
}
}
struct DownloadResult {
let data: String
}
typealias DownloadCompletion = (DownloadResult) -> ()
'SwiftUI' 카테고리의 다른 글
Timer 타이머 (0) | 2024.04.08 |
---|---|
JSON Data (0) | 2024.04.08 |
Weak Self (0) | 2024.04.07 |
CoreBluetooth로 아두이노 불 켜기 (1) | 2024.04.07 |
Background Threads, Queues (0) | 2024.04.07 |