簡體   English   中英

Swift:由於參數關閉而報告錯誤

[英]Swift: closure as parameter reports error

只是編寫一個簡單的Swift應用程序,就會出現此錯誤。

protocol FormDelegate {
    func formDidFinish(form: Form)
}

class Form {
    var delegate: FormDelegate?

    func testClosure(sender: () -> Void) {
    }
}

let form = Form()
form.testClosure {
//      let removeCommentToGetRidOfError = true
    form.delegate?.formDidFinish(form) // error: Cannot convert the expression's type '() -> () -> $T2' to type '()'
}

但是當我插入let語句時,一切正常。 任何線索,這是怎么回事?

問題在於,當沒有顯式返回時,閉包具有自動返回。 在這種情況下,返回值為Void? 因為涉及可選的鏈接。 您可以通過返回最后一條語句來解決此問題:

form.testClosure {
    form.delegate?.formDidFinish(form)
    return
}

或使testClosure返回Void?

class Form {
    var delegate: FormDelegate?

    func testClosure(sender: () -> Void?) {
    }
}

如果閉包中有一個表達式,則swift嘗試返回該乘方結果。 迅速有很多關於此功能的博客文章(或bug?)。 鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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