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