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) 가이드
0 comments:
댓글 쓰기