按位或操作

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容