코딩하는 제리

[Swift] swift 형변환 본문

iOS/SwiftUI

[Swift] swift 형변환

JerryCho 2022. 1. 11. 13:09

// 상속 관계가 있는 클래스들끼리만 타입 캐스팅 가능.

// upcasting (자식 as 부모)
// 자식이 부모로부터 상속받아 더 많은 것을 가지고 있으면 부모로 캐스팅하는 것은 문제 없음.
// as 연산자를 이용한 타입 변환(type casting)
	// - 자식인스턴스 as 부모클래스 (upcasting (안전한 캐스팅). 자식이 추상화 됨.
    // - 업캐스팅은 객체를 부모 클래스의 객체로 형변환.
    // - 형변환은 성공할 것이기 때문에 보장된 변환.
// 자식인스턴스인 myButton을 부모 클래스형으로 형변환.
let myButton: UIButton = UIButton()
let myControl = myButton as UIControl // 자식인스턴스 as 부모 클래스.


// downcasting (부모 as 자식)
// 어떤 클래스에서 다른 클래스로 변환할 때 안전한 변환을 보장할 수 없음.
// 유효하지 않은 형변환이 이루어졌는데 컴파일러가 에러를 잡지 않았다면, 런타임에서 에러 발생.
// 주로 자식클래스로 변환하는데 사용.
// 성공 확신이 있으면 as! 키워드를 사용하여 강제 변환. (변환 안되면 crash)
// 성공 확신이 없으면 as? 키워드를 사용하여 안전하게 변환. (변환 안되면 옵셔널 타입으로 nil 반환)
// 부모인스턴스 as! 자식클래스 (성공 확신이 있을 때)
// 부모인스턴스 as? 자식클래스 (성공 확신이 없을 때, 반환 값이 없으면 결과 옵셔널 nil)
// as? 를 많이 사용.

 

'iOS > SwiftUI' 카테고리의 다른 글

[Swift] guard 문 (조건이 거짓이면 실행)  (0) 2022.01.12
[Swift] 타입 검사, 범위 연산자, nil 합병 연산자  (0) 2022.01.12
[Swift] swift 옵셔널  (0) 2022.01.07
[Swift] swift 튜플  (0) 2022.01.07
[Swift] swift 클로저 캡쳐  (0) 2022.01.07
Comments