Language/Swift

SwiftUI 에서 Typealias으로 타입 별칭 정하기

IFLA 2023. 1. 4. 13:13

 

SwiftUI에서나 사용자가 임의로 만든 데이터 타입은 다른 이름으로 부여할 수 있다. 기존에 선언되어 있는 유형에서 별칭을 사용하는 거다.

  1. 내장 유형 : String, Int, Float…
  2. 사용자 정의 유형 : class, struct, enum …
  3. 복합 유형 : closuer

 

기본 코드

typealias MyName = String
typealias YourName = String
typealias DoubleValue = Double
typealias IntegerValue = Int

let name: MyName = "테스트"
var yourName: YourName = "김아무개"

yourName = name

 

 

이용한 코드

import SwiftUI

//MARK: MODEL
struct FruitModel: Identifiable {
    var id = UUID().uuidString
    let ImageName: String
    let name: String
    let price: Int
    let isFavorite: Bool
}

let Fruits = [
    FruitModel(ImageName: "apple", name: "사과", price: 3000, isFavorite: true),
    FruitModel(ImageName: "Peach", name: "복숭아", price: 2000, isFavorite: false)
]

let character = [
    characterModel(ImageName: "ponyo", name: "포뇨", price: 23000, isFavorite: false),
    characterModel(ImageName: "sosuke", name: "소스케", price: 32000, isFavorite: true)
]

typealias characterModel = FruitModel

struct ContentView: View {
    
    var body: some View {
        HStack {
            ItemsRow(item: character[0])
            ItemsRow(item: character[1])
        }
    }
}
 
struct ItemsRow: View {
    var item: characterModel
    
    var body: some View {
        VStack(spacing: 20) {
            Image(item.ImageName)
                .resizable()
                .scaledToFill()
                .clipShape(Circle())
                .frame(width: 150, height: 150)
            
            Text(item.name)
                .font(.title)
                .fontWeight(.bold)
                .foregroundColor(Color("Peach"))
 
            Text("₩\\(item.price)")
                .font(Font.title2.weight(.semibold))
            
            if item.isFavorite {
                Image(systemName: "star.fill")
                    .foregroundColor(.yellow)
                    .imageScale(.large)
            } else {
                Image(systemName: "star")
                    .foregroundColor(.gray)
                    .imageScale(.large)
            }
        }
    }
}

 

실행 화면