swift中关于??运算符的探索

1.??运算符是一个双目运算符,系统对这个运算符的定义如下:

func ??(optional: T?, defaultValue: @autoclosure () -> T) -> T

我们自己可以手动实现如下:

infix operator +?

func +?(op:T?,handler:@autoclosure()->T)->T{   

      guard let p = op else {        

      return handler();   

 }    

infix operator -?

func -?(op:T?,handler:()->T)->T{

       guard let p = op else {

        return handler();

    }

      return p;

}

测试:

let str = "welcom";

let str1:String? = nil

let handler:(()->String) = {

()->String in

return "1111";

}

let s = str +? "yyyy"

let s1 = str -? handler

let s2 = str1 +? "yyyy"

let s3 = str1 -? handler

print((s,s1,s2,s3));

结果如下:("welcom", "welcom", "yyyy", "1111")

系统的??双目运算符采用了自动闭包,通过我对+?,-?运算符的重载,可以看出。

第一次写,写的不好望见谅

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

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,242评论 0 6
  • 操作符 操作符优先级 在像 1 + 2 * 3 这样的表达式中, 2 * 3 被首先计算, 因为中缀操作符 * ...
    焉知非鱼阅读 5,298评论 0 1
  • import Foundation print("1","2","3","4"); //输出多个字符串,并用“**...
    风的低语阅读 3,283评论 0 0
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡123阅读 4,306评论 0 1
  • Swift2.0 1.defer译为延缓、推迟之意类似栈 注意作用域,其次是调用顺序——即一个作用域结束(注意),...
    zeqinjie阅读 8,645评论 0 50