https://youtu.be/V6-WmAh4Y1E?list=PLJqaIeuL7nuFbWKMhG8-xLzF1T7gIPr8Z
요새 이 채널에서 swift, ios 개발 영상을 열심히 보고 있다.
매번 swift 로 올리는 글도 이 채널의 영상들을 보고 정리하는 것이다.
대학교 강의인 것 같은데 요새는 유튜브에서 여러 강의들이 영상으로 올라오니 무엇이든 배우기 좋은 것 같다.
형 변환(casting)은 as 라는 키워드를 사용한다. 형 변환에는 upcasting, downcasting이 있는데 위를 부모 클래스 아래를 자식 클래스 라고 생각하면 upcasting, downcasting이 무엇인지 쉽게 추측할 수 있다. upcasting은 어떤 객체를 부모 클래스의 객체로 형 변환 하는 것이고 (부모 클래스 <- 자식 클래스) downcasting은 부모 인스턴스를 자식 클래스로 형 변환하는 것이다.
as (upcasting)
어떤 객체를 부모 클래스의 객체로 형 변환 하는 것이기 때문에 결과가 보장되는(nil일 수 없는) 안전한 형 변환 방법이다.
자식 인스턴스 as 부모 클래스
let myBtn : UIButton = UIButton()
let castedBtn = myBtn as UIControl() // 자식 인스턴스 as 부모 클래스
UIButton은 UIControl의 자식 클래스이고 myBtn은 UIButton의 인스턴스이다. 그래서 castedBtn처럼 myBtn을 as 키워드를 사용하여 UIControl로 형 변환할 수 있다.
as! as? (downcasting)
부모 인스턴스를 자식 클래스로 형 변환 하는 것.
부모 인스턴스 as! 자식 클래스
부모 인스턴스 as? 자식 클래스
무조건 형 변환이 확실하게 될 것 같으면 as!를 사용한다. as!로 형 변환을 하면 일반 자료형으로 반환 되는데 이 때 만약 nil이면 에러가 나면서 프로그램이 종료되기 때문에 안전하지 않다.
또는 as? 를 사용하여 형 변환을 하는데 이 때는 옵셔널을 반환한다. 그래서 옵셔널 바인딩이나 forced unwrapping이 필요하다. (아래처럼) as? 키워드는 많이 사용된다고 한다.
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)")
}
}
https://docs.swift.org/swift-book/LanguageGuide/TypeCasting.html
* ? 은 항상 옵셔널을 담고 있다~
'swift & iOS > swift' 카테고리의 다른 글
[swift] 연산자들 (==, ..., ??) (0) | 2022.01.10 |
---|---|
[swift] 타입 체크 (is) (0) | 2022.01.10 |
[swift] Any, AnyObject (0) | 2022.01.10 |
[swift] switch vs. if 언제 쓸까? (짧음 주의) (0) | 2022.01.09 |
[swift] 옵셔널 optional 간단 정리 (0) | 2022.01.08 |