스위프트 3.0
Swift 2.0과 거의 동일합니다. OptionSetType의 이름이 OptionSet으로 바뀌 었으며 열거 형은 규칙에 따라 소문자로 작성됩니다.
struct MyOptions : OptionSet {
let rawValue: Int
static let firstOption = MyOptions(rawValue: 1 << 0)
static let secondOption = MyOptions(rawValue: 1 << 1)
static let thirdOption = MyOptions(rawValue: 1 << 2)
}
none
옵션 을 제공하는 대신 Swift 3 권장 사항은 단순히 빈 배열 리터럴을 사용하는 것입니다.
let noOptions: MyOptions = []
다른 사용법 :
let singleOption = MyOptions.firstOption
let multipleOptions: MyOptions = [.firstOption, .secondOption]
if multipleOptions.contains(.secondOption) {
print("multipleOptions has SecondOption")
}
let allOptions = MyOptions(rawValue: 7)
if allOptions.contains(.thirdOption) {
print("allOptions has ThirdOption")
}
스위프트 2.0
Swift 2.0에서 프로토콜 확장은이를위한 보일러 플레이트의 대부분을 처리하며, 이제는이를 준수하는 구조체로 가져옵니다 OptionSetType
. ( RawOptionSetType
Swift 2 베타 2부터 사라졌습니다.) 선언이 훨씬 간단합니다.
struct MyOptions : OptionSetType {
let rawValue: Int
static let None = MyOptions(rawValue: 0)
static let FirstOption = MyOptions(rawValue: 1 << 0)
static let SecondOption = MyOptions(rawValue: 1 << 1)
static let ThirdOption = MyOptions(rawValue: 1 << 2)
}
이제 다음과 함께 세트 기반 시맨틱을 사용할 수 있습니다 MyOptions
.
let singleOption = MyOptions.FirstOption
let multipleOptions: MyOptions = [.FirstOption, .SecondOption]
if multipleOptions.contains(.SecondOption) {
print("multipleOptions has SecondOption")
}
let allOptions = MyOptions(rawValue: 7)
if allOptions.contains(.ThirdOption) {
print("allOptions has ThirdOption")
}
스위프트 1.2
(스위프트에 의해 수입 된 목표 - C 옵션을 보면 UIViewAutoresizing
예를 들어,), 우리는 옵션이로 선언 된 것을 볼 수 있습니다 struct
해당 프로토콜을 준수 RawOptionSetType
차례에 부합 함을 선언에서에 _RawOptionSetType
, Equatable
, RawRepresentable
, BitwiseOperationsType
,와 NilLiteralConvertible
. 우리는 다음과 같이 우리 자신을 만들 수 있습니다 :
struct MyOptions : RawOptionSetType {
typealias RawValue = UInt
private var value: UInt = 0
init(_ value: UInt) { self.value = value }
init(rawValue value: UInt) { self.value = value }
init(nilLiteral: ()) { self.value = 0 }
static var allZeros: MyOptions { return self(0) }
static func fromMask(raw: UInt) -> MyOptions { return self(raw) }
var rawValue: UInt { return self.value }
static var None: MyOptions { return self(0) }
static var FirstOption: MyOptions { return self(1 << 0) }
static var SecondOption: MyOptions { return self(1 << 1) }
static var ThirdOption: MyOptions { return self(1 << 2) }
}
이제 MyOptions
Apple 문서에 설명 된 것처럼 이 새로운 옵션 세트를 처리 할 수 있습니다. enum
유사한 구문을 사용할 수 있습니다 .
let opt1 = MyOptions.FirstOption
let opt2: MyOptions = .SecondOption
let opt3 = MyOptions(4)
또한 옵션이 작동 할 것으로 예상되는 것처럼 작동합니다.
let singleOption = MyOptions.FirstOption
let multipleOptions: MyOptions = singleOption | .SecondOption
if multipleOptions & .SecondOption != nil { // see note
println("multipleOptions has SecondOption")
}
let allOptions = MyOptions.fromMask(7) // aka .fromMask(0b111)
if allOptions & .ThirdOption != nil {
println("allOptions has ThirdOption")
}
찾기 / 바꾸기없이 Swift 옵션 세트를 생성 하는 생성기를 만들었습니다 .
최신 : Swift 1.1 베타 3 수정.
RawOptionsSetType
같습니다. nshipster.com/rawoptionsettype