簡體   English   中英

將nil傳遞給具有通用類型約束的可選參數的編譯錯誤

[英]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)

MQBlockOperationSignUpOperation都確實繼承自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM