(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으로 브릿징되지 않기 때문이다.

let colors = ["periwinkle", "rose", "moss"]
let moreColors: [String?] = ["ochre", "pine"]

let url = URL(fileURLWithPath: "names.plist")
(colors as NSArray).write(to:url, atomically: true) // ok

(moreColors as NSArray).write(to:url, atomically: true) // error.

원소타입이 클래스이거나 @objc 프로토콜인 경우에 이 변환은 O_{(1)}인데 그렇지 않은 경우에는 O_{(n)}이 된다.

반대로 NSArray에서 Array로 브릿징하는 경우 기본적으로 스토리지는 공유되며 copy-on-write 전략에 의해 최적화된다.


참고자료

  1. Swift Standard Library > Array
  2. Swift Standard Library > Sequence
  3. Swift Standard Library > Collection
  4. Swift Standard Library > Range, ClosedRange
  5. Swift Standard Library > CountableRange, CountableClosedRange
  6. Swift Standard Library > IteratorProtocol
  7. Apple Developer > API Reference > NSArray