<aside> ๐ก Type Casting
</aside>
https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html
class Animal {}
class Human: Animal {}
class Dog: Animal { func roar(){...} }
...
var whatTypeIs = [ human, dog ]
Animal์ ์์๋ฐ๋ Human๊ณผ, Dog class ๊ฐ ์๊ณ , ๋๊ฐ์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ง ๋ฐฐ์ด์ ๋ง๋ค๋ฉด
swift๋ ์ต์์ ํด๋์ค์ธ 'Animal' ํ์ ์ ๊ฐ๋ ๋ฐฐ์ด์ ๋ง๋ค์ด ์ค๋ค.
Object์ Data Type์ ํ์ธ(check)ํด์ฃผ๋ ํค์๋
//use for Type Checking
let cell = UITableViewCell()
if cell is UITableViewCell() {
//if true
}
[sample code]
// When use the 'is' keyword?
func findDog(from animals: [Animal]) {
for animal in animals {
if animal is Dog {
print("Find the dog!, \\(animal.name)")
}
}
}
findDog(from: neighbors)
์์ ์ฝ๋์ ๊ฐ์ด ๋ฐฐ์ด์ ์ด๋ค ํด๋์ค๊ฐ ๋ค์ด์๋์ง ํ์ธํ๊ณ ์ถ์ ๋, is ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
forced downcast
<aside> ๐ก ์ธ์ ๋ค์ด์บ์คํธ๊ฐ ํ์ํ ๊น?
</aside>
func findDog(from animals: [Animal]) {
for animal in animals {
if animal is Dog {
print("Find the dog!, \\(animal.name)")
// ์ฐ๋ฆฌ๋ animal์ด Dog์ธ๊ฑธ ํ์ ํ์ง๋ง ์ปดํ์ผ๋ฌ๋ ๊ทธ๋ ์ง ์๋ค.
๐คฌ์๋ฌ -> animal.roar() //because animal์ ๋ฐ์ดํฐ ํ์
์ 'Animal'์ด๊ธฐ ๋๋ฌธ์
// Need!!Forced Down cast, Animal -> Dog or Human (super -> sub class)
let dog = animal as! Dog
dog.roar()
}
}
}