λ°μν
νμ μΊμ€ν (Type Casting)
- μΈμ€ν΄μ€μ "νμ "μ νμΈνκ±°λ, ν΄λΉ μΈμ€ν΄μ€λ₯Ό μνΌ ν΄λμ€λ νμ ν΄λμ€λ‘ μ·¨κΈνλ λ°©λ²
- Swiftμμ νμ μΊμ€ν μ "is"λ "as" μ°μ°μλ‘ κ΅¬ν
- νμ μΊμ€ν μ μ¬μ©νμ¬ νμ μ΄ νλ‘ν μ½μ μ ν©νμ§ μ¬λΆλ νμΈ κ°λ₯
is
- νμ μ 체ν¬νλ μ°μ°μ
- λ°νμ μμ μ μ€μ 체ν¬κ° μ΄λ£¨μ΄μ§
- λ°ν κ°μ Bool ν
- ννμμ΄ Typeκ³Ό λμΌνκ±°λ, ννμμ΄ Typeμ μλΈν΄λμ€μΈ κ²½μ° Trueλ₯Ό λ°ν
- μ΄ μΈμλ False λ°ν
//1
let char: Character = "A"
char is Character // true
char is String // false
//2
class Animal { }
class Dog: Animal { }
let dog: Dog = .init()
dog is Dog // true
dog is Animal // true
1. λμΌν νμ μ νμΈν λ μ¬μ©
2. Animal ν΄λμ€λ₯Ό Dogλ ν΄λμ€κ° "μμ" λ°μ κ²½μ°, dog μΈμ€ν΄μ€λ Animal ν΄λμ€μ μλΈ ν΄λμ€μ΄κΈ° λλ¬Έμ true λ°ν
as
- ννμ(μ νμ )μ΄ λ³νν Typeκ³Ό νΈνλλ€λ©΄, λ³νν TypeμΌλ‘ μΊμ€ν λ μΈμ€ν΄μ€λ₯Ό 리ν΄
- μμ κ΄κ³μΈ μ μΊμ€ν (Upcasting)κ³Ό λ€μ΄ μΊμ€ν (Downcasting)μμ μ¬μ©
- Anyμ AnyObject νμ μ μ¬μ©ν κ²½μ°, μμ κ΄κ³κ° μλμ΄λ μμΈμ μΌλ‘ μ¬μ© κ°λ₯
μ μΊμ€ν (Upcasting)
- μλΈ ν΄λμ€ μΈμ€ν΄μ€λ₯Ό "μνΌ ν΄λμ€μ νμ "μΌλ‘ μ°Έμ‘°
- μ μΊμ€ν μ νμ μ±κ³΅
- as μ°μ°μλ₯Ό μ¬μ© (μ»΄νμΌ μμ μ μΊμ€ν κ°λ₯ μ¬λΆλ₯Ό κ²°μ )
- as : "μ»΄νμΌ μμ "μ νμ μΊμ€ν (μ μΊμ€ν )μ νλ©°, μ€ν¨ν κ²½μ° μλ¬κ° λ°μ ν¨ν΄ λ§€μΉ(switch)μλ μ¬μ©
class Animal {
let name: String = "Pobi"
}
class Dog: Animal {
let color: String = "White"
}
// 1. asλ₯Ό μ¬μ©ν μ
μΊμ€ν
let animal1 = Dog.init() as Animal
animal1.name //Pobi
animal1.color // Value of type 'Animal' has no member 'color'
// 2. Type Annotationμ μ¬μ©ν μ
μΊμ€ν
let animal2: Animal = Dog.init()
Dog νμ μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§λ§, μ΄λ₯Ό Animal νμ μΌλ‘ μ μΊμ€ν ν΄μ animalμ μ μ₯
animalμ΄ Dogλ μλΈ ν΄λμ€λ₯Ό, Animalμ΄λ μνΌν΄λμ€ νμ μΌλ‘ μ°Έμ‘°νλ"μ μΊμ€ν "μ ν κ²μ΄κΈ° λλ¬Έμ, animalμ μ κ·Ό λ²μκ° "Animal" λ©€λ²λ‘ νμ λλ κ²
λ°λΌμ Animal ν΄λμ€μ λ©€λ²μΈ nameμ μ κ·Όν μ μμ§λ§, μλΈ ν΄λμ€ Dogμ λ©€λ²μΈ colorμλ μ κ·Όν μ μμ
λ€μ΄μΊμ€ν (Downcasting)
- μνΌ ν΄λμ€ μΈμ€ν΄μ€λ₯Ό "μλΈ ν΄λμ€μ νμ "μΌλ‘ μ°Έμ‘°
- μ μΊμ€ν λ μΈμ€ν΄μ€λ₯Ό λ€μ μλ μλΈ ν΄λμ€ νμ μΌλ‘ μ°Έμ‘°ν λ μ¬μ©
- λ€μ΄ μΊμ€ν μ μ€ν¨ν μ μκΈ° λλ¬Έμ as? λλ as! μ°μ°μ μ¬μ©
- as? : "λ°νμ μμ "μ νμ μΊμ€ν (λ€μ΄ μΊμ€ν )μ νλ©°, μ€ν¨ν κ²½μ° nilμ 리ν΄
- as! : "λ°νμ μμ "μ νμ μΊμ€ν (λ€μ΄ μΊμ€ν )μ νλ©°, μ€ν¨ν κ²½μ° μλ¬ λ°μ
class Animal {
let name: String = "Pobi"
}
class Dog: Animal {
let color: String = "White"
}
let animal = Dog.init() as Animal
var dog: Dog = animal as! Dog
dog.name //Pobi
dog.color //White
λ°μν
'β¨οΈ Language > swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] νλ‘ν μ½ (Protocol) (0) | 2023.02.06 |
---|---|
[Swift] assertμ guard (0) | 2023.02.06 |
[Swift] ν΄λμ€(Class)μ ꡬ쑰체(Struct) (0) | 2023.02.06 |
[Swift] μ΅μ λ (Optional) (0) | 2023.02.06 |
[νλ‘κ·Έλλ¨Έμ€ LV.1] μμΈμμ κΉμλ°© μ°ΎκΈ° (0) | 2023.02.06 |