3
let nilClosure: (() -> Void)? = nil
let notNillable: AnyObject = nilClosure ?? 1
爲什麼這不起作用?任何示例顯示如何讓無合併操作員使用閉包工作,表示讚賞。如何讓零合併操作員使用閉包工作?
我得到的錯誤是:
二元運算符 '?'不能應用於'(() - > Void)類型的操作數?和 '內部「'
let nilClosure: (() -> Void)? = nil
let notNillable: AnyObject = nilClosure ?? 1
爲什麼這不起作用?任何示例顯示如何讓無合併操作員使用閉包工作,表示讚賞。如何讓零合併操作員使用閉包工作?
我得到的錯誤是:
二元運算符 '?'不能應用於'(() - > Void)類型的操作數?和 '內部「'
從蘋果的文檔:
的零合併運算(A?B)解開一個可選的一個,如果它 包含一個值,或返回默認值b,如果是零。該 表達是一個可選的類型始終。表達式b必須 匹配存儲內的類型。
需要注意的是最後一句......
即使那麼??運營商不適用於關閉。 即使這樣做,關閉也不符合AnyObject
,因此不能分配給一個。
你可以這樣做:
enum OddObject {
case Closure(() -> Void)
case Value(Int)
}
let wrappedNilClosure: OddObject? = nil
let oddObject = wrappedNilClosure ?? .Value(1)
或者這樣:
let nilClosure: (() -> Void)? = nil
let notNillable: Any = nilClosure != nil ? nilClosure! : { }
這取決於什麼需要你正試圖填補。
你會得到什麼樣的編譯器錯誤? –