Type Casting - The Swift Programming Language (Swift 5.6)
Type casting은 인스턴스의 타입을 체크하는 방법.
인스턴스를 자체 클래스 계층구조의 다른 위치에서 다른 부모/자식 클래스로 처리하는 방법?
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: "Casablanca", director: "Michael Curtiz"),
Song(name: "Blue Suede Shoes", artist: "Elvis Presley"),
Movie(name: "Citizen Kane", director: "Orson Welles"),
Song(name: "The One And Only", artist: "Chesney Hawkes"),
Song(name: "Never Gonna Give You Up", artist: "Rick Astley")
]
// the type of "library" is inferred to be [MediaItem]
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")
// Prints "Media library contains 2 movies and 3 songs"
for item in library {
if let movie = item as? Movie {
print("Movie: \\(movie.name), dir. \\(movie.director)")
} else if let song = item as? Song {
print("Song: \\(song.name), by \\(song.artist)")
}
}
// Movie: Casablanca, dir. Michael Curtiz
// Song: Blue Suede Shoes, by Elvis Presley
// Movie: Citizen Kane, dir. Orson Welles
// Song: The One And Only, by Chesney Hawkes
// Song: Never Gonna Give You Up, by Rick Astley