按位或操作

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: 1 << 0) 
  static let Swfit_Title = SwiftOptions(rawValue: 1 << 1) 
  static let Swift_Vibrate = SwiftOptions(rawValue: 1 << 2 )
}

** 在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 **

OCOptions options = OC_Sound | OC_Title;

** 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

你可能感兴趣的:(按位或操作)