OC和Swift中的Options

前端之家收集整理的这篇文章主要介绍了OC和Swift中的Options前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1. OC 和 Swift 中的区别

OC中定义Options

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

Swift 中定义Options

  1. // 需要实现OptionSetType协议
  2. struct SwiftOptions: OptionSetType {
  3. let rawValue: UInt
  4. init(rawValue: UInt) { self.rawValue = rawValue }
  5.  
  6. static let Swift_Sound = SwiftOptions(rawValue: 1 << 0)
  7. static let Swfit_Title = SwiftOptions(rawValue: 1 << 1)
  8. static let Swift_Vibrate = SwiftOptions(rawValue: 1 << 2 )
  9. }

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

  1. OCOptions options = OC_Sound | OC_Title;

* swift *

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

删除选项组合的一部分

* ObjectiveC *

  1. OCOptions options = OC_Sound | OC_Title; // 3
  2. // 删除OC_Sound选项
  3. OCOptions modifiedOptions = options & (~OC_Sound); // 2

* swift *

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

猜你在找的Swift相关文章