목차
- Array – 생성과 조작
- Array – Sequence 프로토콜
- Array – Collection 프로토콜
- Array – ArraySlice
- Array – NSArray
브릿징 – NSArray
NSArray
에서 제공하는 API를 사용하기 위해서는 Array
인스턴스를 as NSArray
를 통해서 브릿징해야 한다. 브릿징이 가능한 경우는 배열 내 원소의 타입이 다음 중 한가지여야 한다.
- 클래스
@objc
속성이 있거나Objective-C
로부터 들여온 프로토콜- 애초에 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
프로토콜인 경우에 이 변환은 인데 그렇지 않은 경우에는 이 된다.
반대로 NSArray
에서 Array
로 브릿징하는 경우 기본적으로 스토리지는 공유되며 copy-on-write
전략에 의해 최적화된다.
참고자료
- Swift Standard Library > Array
- Swift Standard Library > Sequence
- Swift Standard Library > Collection
- Swift Standard Library > Range, ClosedRange
- Swift Standard Library > CountableRange, CountableClosedRange
- Swift Standard Library > IteratorProtocol
- Apple Developer > API Reference > NSArray