yoogail105 / KkokkoSwift

꼬리에 꼬리를 무는 swift 개념 정리
28 stars 0 forks source link

# KeyPath #76

Open yoogail105 opened 2 years ago

yoogail105 commented 2 years ago

KeyPath: \BaseType.PropertyName

KeyPath 사용하기

struct ColorChart {
    var name: String
    var hexCode: String
}

struct Brand {
    var name: String
    var mainColor: ColorChart
    var subColor: ColorChart
}

var red = ColorChart(name: "red", hexCode: "FF0000")
var blue = ColorChart(name: "blue", hexCode: "00FF00")
let popo = Brand(name: "popo", mainColor: red, subColor: blue)
let mainColor = popo[keyPath: \.mainColor.name]
let subColor = popo[keyPath: \.subColor.name]

print("popoMainColor: \(mainColor.name), popoSubColor: \(subColor.name)")
// popoMainColor: red, popoSubColor: blue
func getMainColor(brand: Brand) -> ColorChart {
    return brand.mainColor.
}

func getSubColor(brand: Brand) -> ColorChart {
    return brand.subColor
}

let popoMainColor = getMainColor(brand: popo)
let popoSubColor = getSubColor(brand: popo)
func getColor(brand: Brand, keyPath: KeyPath<Brand, ColorChart>) -> ColorChart {
    return brand[keyPath: keyPath]
}
let popoMainColor = getColor(brand: popo, keyPath: \.mainColor)
let popoSubColor = getColor(brand: popo, keyPath: \.subColor)


🔖 참고

yoogail105 commented 2 years ago

KeyPath 종류

KeyPath 만들어서 사용하기

let brandNameKeyPath = \Brand.name
let mainColorKeyPath = \Brand.mainColor
let subColorKeyPath = \Brand.subColor
image image


🔖 참고

yoogail105 commented 2 years ago

KVC(Key-Value Coding)

struct Brand { let name: String var mainColor: ColorChart var subColor: ColorChart }

var red = ColorChart(name: "red", hexCode: "FF0000") var blue = ColorChart(name: "blue", hexCode: "00FF00") let popo = Brand(name: "popo", mainColor: red, subColor: blue)

// keyPath 만들기 let brandNameKeyPath = \Brand.name let mainColorKeyPath = \Brand.mainColor let subColorKeyPath = \Brand.subColor

// keyPath로 값에 접근하기 let mainColor = popo[keyPath: mainColorKeyPath] let subColor = popo[keyPath: subColorKeyPath]

print("popoMainColor: (mainColor.name), popoSubColor: (subColor.name)") // popoMainColor: red, popoSubColor: blue