KeyPath
KeyPath
๋ฌธ์์ด ๋ฐฉ์์ผ๋ก ์์ฑ์ ๊ฐํธํ๊ฒ ์ ๊ทผํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํด์
Person.name์ ๊ฐ์ด ๋ฐ๋๋ ์๊ฐ์ ์๊ณ ์ถ์ ๋!
์์ฑ๊ฐ์์๋ก ํ์ง ์๋ ์ด์
๊ฐ์ฒด ๋ด๋ถ๊ฐ ์๋, ๊ฐ์ฒด์ ์ธ๋ถ์์๋ง ๊ด์ฐฐํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค.
\Person.name
โ ๊ฒฝ๋ก๋ฅผ ๋ง๋ค๊ณ , ์ธ์คํด์ค ์์ฑ์ ์ ๊ทผํ๋ ๊ธฐ์ ์ด๋ค.
Selector
๋ฉ์๋์ ์ฃผ์๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๊ธฐ ์ํ ๊ธฐ์
#selector(Person.walk)
โ ๋ฉ์๋๊ฐ ๊ตฌํ๋ ์ฃผ์๋ฅผ ๊ฐ์ ์ ์ผ๋ก ๋ฝ์๋ผ ์ ์๋ค.
KeyPath์ ์์
์ด๋ป๊ฒ ๋ง๋ค์ด์ง๊ฒ ๋์์๊น?
๊ฐ์ ์ ์ผ๋ก ์์ฑ์ ์ ๊ทผํ๊ณ ์ถ๋ค.
ํน๋ณํ ๋ฌธ์์ด์ ๋ง๋ค์ด๋๊ณ , ํด๋น ์์ฑ์ ์ ๊ทผํ๊ณ ์ถ์ด!
์์ฑ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ์ ๊ทผํ๊ณ ์ถ์ด! (์๋ธ์คํฌ๋ฆฝํธ์ฒ๋ผ)
์ฝ๋
class School {
var name: String
**var affiliate: SmallSchool**
init(name: String, affiliate: SmallSchool) {
self.name = name
self.affiliate = affiliate
}
}
class SmallSchool {
**var classMember: Person**
init(classMember: Person) {
self.classMember = classMember
}
}
class Person {
**var name: String**
init(name: String) {
self.name = name
}
}
// ์ง์ ์ ๊ทผ
let person1 = Person(name: "ํ๊ธธ๋")
let smallSchool1 = SmallSchool(classMember: person1)
let school1 = School(name: "์ํผ๊ณ ", affiliate: smallSchool1)
let gildong = school1.affilate.classMember.name
// Swift5์์์ ๊ฐ์ ์ ๊ทผ
let namePath = \School.affiliate.classMember.name // keyPath ๊ฒฝ๋ก ์ง์
school1[keyPath: namePath] // ๋์
๋๋ฆฌ ๋ฐฉ์(์๋ธ์คํฌ๋ฆฝํธ)๋ก ์ ๊ทผ ๊ฐ๋ฅ
KeyPath = ๊ฒฝ๋ก
๋๊ดํธ๋ฅผ ์ฐ๋ฉด, ๊ฐ์ ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ค.
๊ฒฝ๋ก ์ถ๊ฐ
let namePath = \School.affiliate.classMember // ๋ฏธ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ง์ (**keyPath**)
let newNamePath = namePath.appending(path: \.name)
school1[keyPath: newNamePath] // appending ๋ฉ์๋๋ก ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
Last updated