타입 캐스팅과 타입 검사

jonghwan·2022년 9월 24일
0

멋쟁이사자처럼

목록 보기
8/28
post-thumbnail

타입 캐스팅 (Type casting)

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

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

이럴 때는 as 키워드를 사용하여 코드가 의도하는 값의 타입을 컴파일러가 알 수 있게 해야 한다. (타입 캐스팅 = 형 변환)

object(forkey:) 메서드가 반환하는 값을 String 타입으로 처리해야 한다고 컴파일러에게 알려줘야 한다면..

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

업캐스팅 (upcasting)

타입캐스팅의 두 가지 형태 중 하나

특정 클래스의 객체가 상위 클래스들 중의 하나로 변형되는 것

as 키워드를 사용해, 이러한 변환은 성공할 것이라고 줌 -보장된 변환(guaranteed conversion)

let myButton: UIButton = UIButton()
let myControl = myButton as UIControl

다운캐스팅 (downcasting)

타입캐스팅의 두 가지 형태 중 또 다른 하나

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

안전하게 수행된다거나 유효하지 않은 변환 시도를 컴파일러가 잡아낼 것이라는 보장을 할 수 없다.

컴파일러가 발견하지 못했다면, 대부분의 경우 런타임에서 에러가 발생할 것이다.

as!를 사용하여 그 클래스의 하위 클래스로 변환 -강제 변환(forced conversion)

let myScrollView: UIScrollView = UIScrollView()
let myTextView = myScrollView as UITextView  // x

'UIScrollView' is not convertible to 'UITextView'
(이 변환의 안정성을 보장할 수 없다)

as?를 사용한 옵셔널 바인딩을 사용하면 더 안전하다.

let myScrollView: UIScrollView = UIScrollView()

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

타입 검사 (Type check)

is 키워드를 사용하여 타입 검사를 할 수도 있다.

다음의 코드는 MyClass라는 이름의 클래스의 인스턴스인지를 검사하는 코드다.

if myObject is MyClass {
  // myObject는 MyClass의 인스턴스다.
}

0개의 댓글