iOS/Swift 문법

[Swift 문법] 타입 캐스팅과 타입 검사

초코비23 2021. 12. 22. 23:00

스위프트 타입 캐스팅과 타입 검사

 

타입 캐스팅

스위프트 코드를 작성할 때 컴파일러가 어떤 값의 특정 타입을 식별하지 못하는 경우가 발생 한다.

이런 경우에는 메서드나 함수가 반환하는 값이 불명확하거나 예상되지 않는 타입의 값일 때 발생한다.

 

이럴 때는 as 키워드를 사용하여 의도하는 값의 타입을 알려 줄 수 있으며 이것을 타입 캐스팅(type casting)이라고 한다.

 

예를 들어

let myVvalue = record.object(forKey: "comment") as! String

이것은 메서드가 반환하는 값을 String 타입으로 처리해야 한다고 컴파일러에게 알려주는 코드다.

 

타입 캐스팅은 업캐스팅과 다운캐스팅이라는 두가지 형태가 있다.

 

업캐스팅은 특정 클래스의 객체가 상위 클래스들 중의 하나로 변형되는 것을 말한다. 업캐스팅은 as키워드를 사용하여 수행되며 이러한 변환은 성공할 것이라고 컴파일러가 알려줄 수 있기 때문에 보장된 변환(guaranteed conversion)이라고 한다.

let myButton : UIButton = UIButton()
let myControl = myButton as UIControl // UIButton의 업캐스팅인 UIControl을 사용

이와 같이 사용할 수 있다.

 

다운캐스팅은 어떤 클래스에서 다른 클래스로 만드는 변환이 일어날 때 발생한다.

하지만 이러한 변환이 업캐스팅과는 다르게 안전하게 수행된다거나 유효하지 않은 변환 시도를 컴파일러가 잡아낼 것이라고 보장할 수 없다.

다운캐스팅은 as!키워드를 사용하여 수행되며 강제 변환(force conversion)이라고 한다.

let myScrollView: UIScrollView = UIScrollView()

// let myTextView = myScrollView as UITextView // 변환의 안정성을 보장할 수 없다고 에러가 나옴
let myTextView = myScrollView as! UITextView // 강제 변환

 

다운 캐스팅을 하는 안전한 방법은 as?를 사용한 옵셔널 바인딩을 사용하면 된다.

if let myTextView = myScrollView as? UITextView {
	print("Type cast to UITextView succeeded")
}

else{ // 다운 캐스팅에서 오류가 발생시 nil 값이 나오면서
	print("Type cast to UITextView failed")
}

 

 

타입 검사

타입 검사(type check)는 is키워드로 사용할 수 있다.

if myObject is MyClass{
	print("myObject는 Myclass의 인스턴스 입니다")
}

이러한 식으로 is 키워드를 사용하면 타입을 검사할 수 있다.

 

 

 

출처 : 핵심만 골라 배우는 SwiftUI 기반의 iOS 프로그래밍

책을 보면서 내용을 정리했습니다.. 혹시 틀린 내용이 있다면 댓글로 언제나 말씀해주세요!!!☺️