콘텐츠로 건너뛰기
Home » bridged type

bridged type

(Swift) Objctive-C와 Swift 타입의 브릿징

브릿징

Swift의 많은 기본 타입들은 Objective-C의 파운데이션 타입에 대응되는 것들이 있고 (e.g. String <-> NSString) 이렇게 카운터파트가 존재하는 타입들은 파운데이션타입으로 브릿징된다. 브릿징은 Objective-C 타입이 Swift 타입으로 행동하거나 혹은 반대로 Swift 타입이 Objective-C 타입처럼 행동하여 이 둘을 상호간에 바꿔쓸 수 있음을 말한다. 다시 말해 파운데이션 API를 사용하면서 NSString 을 사용해야 할 때 String을 쓰거나 반대로 Swift 함수/메소드 호출 시 String 을 써야 할 때 NSString을 쓰는 것이 허용된다는 말이다. 1

 Swift는 어떤 Objective-C 타입들을 자동으로 Swift 타입으로 변환하며, 그 반대의 동작도 자동으로 수행합니다. 이렇게 Objective-C와 Swift 사이에서 전환되는 타입들을 “bridged types”라 부릅니다. 예를 들어, Swift 코드에서 NSString 파라미터를 요구하는 Objective-C API에 String 타입의 값을 넘겨줄 수 있습니다. 또한 많은 코코아 프레임워크들은 API를 좀 더 Swift 스럽게 새로 정의했습니다. 예를 들어 NSCoderdecodeObjectOfClass(_:forKey:)는 Swift의 제네릭 타입을 통해 보다 강한 타입시그니처를 갖게 됐습니다.2

사실 이 브릿징은 Objective-C에 익숙하다면 낯선 개념은 아니다. 코코아에는 Objective-C가 아닌 C로 제작된 코어 파운데이션 프레임워크가 있고, 이미 NS* 클래스들은 CF* 타입들과 브릿징되고 있다. 더 보기 »(Swift) Objctive-C와 Swift 타입의 브릿징

(Swift) Array – 05. NSArray

목차

  1. Array – 생성과 조작
  2. Array – Sequence 프로토콜
  3. Array – Collection 프로토콜
  4. Array – ArraySlice
  5. Array – NSArray

브릿징 – NSArray

NSArray에서 제공하는 API를 사용하기 위해서는 Array 인스턴스를 as NSArray를 통해서 브릿징해야 한다. 브릿징이 가능한 경우는 배열 내 원소의 타입이 다음 중 한가지여야 한다.

  1. 클래스
  2. @objc 속성이 있거나 Objective-C로부터 들여온 프로토콜
  3. 애초에 Foundation 타입으로 브릿지 되는 타입

아래 예제는 Array 인스턴스를 NSArray 인스턴스로 브릿징하여 그 내용을 write(to:atomically:)로 저장하는 방법을 보여준다. [String] 타입은 NSArray<NSString>으로 브릿징이 가능하지만 [String?] 타입에 대해서는 불가능한데, String? 옵셔널 타입은 NSString으로 브릿징되지 않기 때문이다.더 보기 »(Swift) Array – 05. NSArray