Notice
Recent Posts
Recent Comments
Link
大器晩成
타입캐스팅(Type Casting) 본문
- 인스턴스 타입을 검사 - is 연산자
- 클래스 계층 상의 타입 변환 - as 연산자
class Person {
var name = ""
var age = 10
}
class Student: Person {
var id = 1
}
class Undergradudate: Student {
var major = "전자공학"
}
타입 비교 연산
- 인스턴스 타입을 검사하는 is 연산자 (type check operator)
인스턴스(또는 변수, 상수) is 비교 대상 타입 (이항연산자)
1. 연산자 왼쪽 인스턴스 타입이 연산자 오른쪽 비교 대상 타입과 일치할 경우 - true
2. 연산자 왼쪽 인스턴스의 타입이 연산자 오른쪽 비교 대상 타입의 하위 클래스일 경우 - true
3. 그 외 - false
let person = Person()
let student = Student()
let undergraduate = Undergraduate()
person is Person //true
person is Student //false
person is Undergraduate //false
student is Person //true
student is Student // true
student is Undergraduate // false
undergraduate is Person // true
undergraduate is Student // true
undergraduate is Undergraduate // true
- student는 Person의 하위 클래스이기 때문에 student is Person은 true입니다.
- undergraduate는 Person과 Student의 하위 클래스이기 때문에 모든 상황에서 true입니다.
Apple 공식문서 예제
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"
728x90
'iOS > Swift 문법' 카테고리의 다른 글
타입과 다형성 (0) | 2024.12.19 |
---|---|
타입캐스팅 (as, type cast operator) (0) | 2024.12.19 |
구조체/클래스의 생성자/소멸자 비교 (0) | 2024.12.06 |
초기화 해제 (소멸자, Deinitializer) (0) | 2024.12.06 |
실패가능 생성자(Failable Initializers) (0) | 2024.12.06 |