Swift 2.0 - OptionSetType
OptionSetType은 기존의 비트 단위 옵션셋을 대체하기 위해 등장한 프로토콜이다. enum이나 #define을 쓰던 때와는 다르게 struct 기반의 옵션셋 구현을 가능하게 해 준다.
Xcode 7 에서는 기존의 UIKit이나 AppKit의 enum 옵션셋(Bitwise OR을 사용해 조합하는) 타입이 거의 대부분 이 OptionSetType 형식으로 바꾼 것 같다. 따라서 이 변화를 미리 알아두는 편이 좋을 것이다.
[관련글] Swift 2.0 - 그 외 사소한(?) 변화들
[관련글] 스위프트(Swift) 가이드
C 스타일 예제
C라곤 했지만 Objective-C도 해당되는 거긴 하다.typedef enum _my_option { MyOptionInit = 0x0, MyOptionGood = 0x1, MyOptionBad = 0x1 << 1; } MyOption; MyOption option = MyOptionGood | MyOptionBad; if (option == MyOptionInit) { NSLog(@"INIT"); } if (option & MyOptionGood) { NSLog(@"GOOD"); } if (option & MyOptionBad) { NSLog(@"BAD"); }비트의 OR연산을 이용해 하나의 단위 변수에 여러 옵션을 박아 넣는 방식의 C식 예제이다. 아마도 Objective-C를 사용해 왔다면 종종 사용하던 옵션플래그 제작 방식일 것이다.
OptionSetType
위 예제를 Swift 2.0 코드로 옮겨보면서 OptionSetType 프로토콜을 준수하는 형태로 바꾸어보자.struct MyOption: OptionSetType { let rawValue: Int static let Init = MyOption(rawValue: 0) static let Good = MyOption(rawValue: 1) static let Bad = MyOption(rawValue: 2) } // .Init과 .Good 두개를 옵션으로 사용 let option: MyOption = [.Init, .Good] // 옵션이 들어있는지 확인 option.contains(.Init) // true option.contains(.Bad) // false중요한 내용은 전부 나온 것 같다. 보다싶이, 배열도 아닌것이 배열 비슷한 문법으로 기존의 enum을 대체할 수 있게 만들어졌다.
Xcode 7 에서는 기존의 UIKit이나 AppKit의 enum 옵션셋(Bitwise OR을 사용해 조합하는) 타입이 거의 대부분 이 OptionSetType 형식으로 바꾼 것 같다. 따라서 이 변화를 미리 알아두는 편이 좋을 것이다.
[관련글] Swift 2.0 - 그 외 사소한(?) 변화들
[관련글] 스위프트(Swift) 가이드
댓글