美文网首页
swift ??理解

swift ??理解

作者: 我的大好时光 | 来源:发表于2018-09-04 15:40 被阅读9次
概念

??这个操作符可以快速的对nil进行条件判断。这个操作符可以判断:在左侧的值是 非nil的Optional值时返回其value,当左侧是nil时返回右侧的值。 比如:

var a: Int?
var b: Int = 1
var c = a ?? b
查看api,定义如下:
//第一个参数是:可选值
//第二个参数是:闭包
func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T?) rethrows -> T?
func ?? <T>(optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T
理解:
  • 思考:这里为什么要使用autoclosure,直接接受defaultValue作为参数并返回不行么,为什么要用()-> T 这样的形式包装一边,岂不是画蛇添足。

  • 答:这正是@autoclosure的优点,如果我们直接使用defaultValue,那意味着在??操作符真正取值之前,我们必须准备好一个默认值传入到这个方法中,一般来说不会有太大的问题,但是如果这个默认值是通过一系列计算得到的话,可能会造成浪费--因为 如果Optional不是nil的话,我们实际上是完全没有用到这个默认值,而会直接返回optional解包后的值。这样的开销是完全可以避免的,方法就是将默认值的计算推迟到optional判断为nil之后。

  • 注意:“最后要提一句的是,@autoclosure 并不支持带有输入参数的写法,也就是说只有形如 () -> T 的参数才能使用这个特性进行简化。另外因为调用者往往很容易忽视 @autoclosure 这个特性,所以在写接受 @autoclosure 的方法时还请特别小心,如果在容易产生歧义或者误解的时候,还是使用完整的闭包写法会比较好”。

相关文章

网友评论

      本文标题:swift ??理解

      本文链接:https://www.haomeiwen.com/subject/ceigwftx.html