天天看點

OC和Swift中的Options

1. OC 和 Swift 中的差別

OC中定義Options

typedef NS_OPTIONS(NSUInteger, OCOptions) {
    OC_Sound = 1 << 0,
    OC_Title = 1 << 1,
    OC_Vibrate = 1 << 2,
};
           

Swift 中定義Options

// 需要實作OptionSetType協定
struct SwiftOptions: OptionSetType {
    let rawValue: UInt
    init(rawValue: UInt) { self.rawValue = rawValue }

    static let Swift_Sound = SwiftOptions(rawValue:  << )
    static let Swfit_Title = SwiftOptions(rawValue:  << )
    static let Swift_Vibrate = SwiftOptions(rawValue:  <<  )
}
           

* 在Swift中,可以調用OC的Options,但是,在OC中,不能調用Swift中的Options。 *

在OC中,不能調用Swift中定義的:

  • Generics
  • Tuples
  • Enumerations defined in Swift without Int raw value type
  • Structures defined in Swift
  • Top-level functions defined in Swift
  • Global variables defined in Swift
  • Typealiases defined in Swift
  • Swift-style variadics
  • Nested types
  • Curried functions

2.操作

并操作(Union)

* ObjectiveC *

* swift *

let options = Swift_Sound.union(Swift_Vibrate)
print(options)
           

删除選項組合的一部分

* ObjectiveC *

OCOptions options = OC_Sound | OC_Title; // 3
// 删除OC_Sound選項
OCOptions modifiedOptions = options & (~OC_Sound); // 2
           

* swift *

let options = Swift_Sound.union(Swfit_Title) // 3
let modifiedOptions = SwiftOptions(rawValue: options.rawValue - Swfit_Title.rawValue) // 1