1.??運(yùn)算符是一個(gè)雙目運(yùn)算符,系統(tǒng)對(duì)這個(gè)運(yùn)算符的定義如下:
func ??(optional: T?, defaultValue: @autoclosure () -> T) -> T
我們自己可以手動(dòng)實(shí)現(xiàn)如下:
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;
}
測(cè)試:
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));
結(jié)果如下:("welcom", "welcom", "yyyy", "1111")
系統(tǒng)的??雙目運(yùn)算符采用了自動(dòng)閉包,通過我對(duì)+?,-?運(yùn)算符的重載,可以看出。
第一次寫,寫的不好望見諒