[英]Error expected : Ternary conditional nil for not optional type of parameter in SwiftUI function
[英]Compile error for passing nil to an optional parameter with a generic type constraint
我的類MQChainedOperation
具有一個函數append
,該函數接受從MQOperation
繼承的任何操作:
public func append<T: MQOperation>(operation: T,
validator: (Any? -> Bool)?,
configurator: ((T, Any?) -> Void)?) {
// ...
}
在視圖控制器中,我這樣做:
let chain = MQChainedOperation()
chain.append(
MQBlockOperation {[unowned self] in
// ...
},
validator: nil,
configurator: nil)
chain.append(
SignUpOperation(),
validator: nil,
configurator: nil)
當MQBlockOperation
和SignUpOperation
都確實繼承自MQOperation
時,編譯器會從兩次追加調用中拋出此錯誤:
無法使用類型為((MQOperation,validator:(Any?-> Bool)?, configurator:((MQOperation,Any?)-> Void)?)的參數列表調用'append'
需要類型為'(T,validator:(Any?-> Bool)?, configurator:((T,Any?)-> Void)?)的參數列表
但是,如果我為configurator
提供了一個空的閉包,那么它將起作用:
chain.append(
MQBlockOperation {[unowned self] in
// ...
return NSDate()
},
validator: nil,
configurator: {(op, result) in})
chain.append(
SignUpOperation(),
validator: nil,
configurator: {(op, result) in})
我應該能夠將nil
傳遞給可選參數,並且解決方法使我的代碼很難看。 我該如何解決?
如注釋中所示,這似乎是Swift編譯器的錯誤。 現在,我喜歡的一種快速,干凈的修復方法是在函數簽名中提供nil
作為默認值。
public func append<T: MQOperation>(operation: T,
validator: (Any? -> Bool)?,
configurator: ((T, Any?) -> Void)? = nil)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.