所以我想要的是一個可能會在函數中傳遞給它的閉包的類,它也可能在某個時候想要忽略閉包。如何檢查閉包變量是否已設置,並且可以在完成後刪除它?可選閉包並檢查它是否
不能調用 '!=' 類型的參數列表 '(@lvalue(sucsess: 布爾!,產品:[AnyObject]) - >()?NilLiteralConvertible)' 類型「(sucsess :Bool !,產品:[AnyObject]!) - >()?'不符合 協議「NilLiteralConvertible」
class someClass{
//typealias completionHandlerClosureType = (sucsess:Bool!, items:[AnyObject]!)->()
var completionHandler:(sucsess:Bool!, items:[AnyObject]!)->()?
var hitpoints = 100
var someset = ["oh no!","avenge me!"]
init(){}
func getHitFunc(impact:Int, passedCompletionsHandler:(sucsess:Bool!, items:[AnyObject]!)->()){
completionHandler = passedCompletionsHandler
hitpoints = hitpoints - impact
}
func checkIfDead{
if hitpoints<=0 { // The error received
if completionHandler != nil{// Cannot invoke '!=' with an argument list of type
//'(@lvalue (sucsess: Bool!, products: [AnyObject]!) ->()?, NilLiteralConvertible)'
//run the handler if dead
completionHandler(sucsess: true, items: someset)
//do not run it again
completionHandler = nil //Type '(sucsess: Bool!, products: [AnyObject]!) ->()?' does not conform to protocol 'NilLiteralConvertible'
}
}
else{
completionHandler = nil //Type '(sucsess: Bool!, products: [AnyObject]!) ->()?' does not conform to protocol 'NilLiteralConvertible'
}
}
}
類型別名是偉大的解決方案 – Yitzchak 2017-03-06 15:26:24