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")
系统的??双目运算符采用了自动闭包,通过我对+?,-?运算符的重载,可以看出。
第一次写,写的不好望见谅