타입 캐스팅이란?
인스턴스의 타입을 확인하거나 어떠한 클래스의 인스턴스를 해당 클래스 계층 구조의 슈퍼 클래스나 서브 클래스로 취급하는 방법입니다.
타입 캐스팅 연산자로 is, as를 이용하여 구성합니다.
class MediaItem {
var name: String
init(name: String) {
self.name = name
}
}
class Movie: MediaItem {
var director: String
init(name: String, director: String) {
self.director = director
super.init(name: name)
}
}
class Song: MediaItem {
var artist: String
init(name: String, artist: String) {
self.artist = artist
super.init(name: name)
}
}
let library = [
Movie(name: "기생충", director: "봉준호"),
Song(name: "Butter", artist: "BTS"),
Movie(name: "올드보이", director: "박찬욱"),
Song(name: "Wonderwall", artist: "Oasis"),
Song(name: "Rain", artist: "이적")
]
var movieCount = 0
var songCount = 0
for item in library {
if item is Movie {
movieCount += 1
} else if item is Song {
songCount += 1
}
}
print("Media library contains \(movieCount) movies and \(songCount) songs") //"Media library contains 2 movies and 3 songs\n"
//형을 변환할 수 있는 다운캐스팅, 특정 클래스 타입의 상수 또는 변수는 하위클래스 인스턴스에 참조가능
for item in library {
if let movie = item as? Movie {
print("Movie: \(movie.name), dir. \(movie.director)") //Movie: 기생충, dir. 봉준호, Movie: 올드보이, dir. 박찬욱
} else if let song = item as? Song {
print("Song: \(song.name), by \(song.artist)") //Song: Butter, by BTS, Song: Wonderwall, by Oasis, Song: Rain, by 이적
}
}
'개발 > Ios(Swift)' 카테고리의 다른 글
IOS 스위프트(Swift) 문법 - 프로토콜 (0) | 2021.08.25 |
---|---|
IOS 스위프트(Swift) 문법 - assert와 guard (0) | 2021.08.23 |
IOS 스위프트(Swift) 문법 - 상속 (0) | 2021.08.19 |
IOS 스위프트(Swift) 문법 - 클래스와 구조체의 차이 (0) | 2021.08.19 |
IOS 스위프트(Swift) 문법 - 프로퍼티 (0) | 2021.08.17 |