Öyleyse sahip olmak istediğim bir işlevde bir kapanma elde edebilen bir sınıf, aynı zamanda bir noktada bu kapatmayı göz ardı etmek isteyebilir. Kapatma değişkeninin ayarlanmış olup olmadığını nasıl kontrol edebilirim ve işim bittiğinde onu silebilir miyim?İsteğe bağlı kapatma ve null olup olmadığını kontrol edin
türünde bir argüman listesi ile '=!' Çağırmak olamaz '(@lvalue (başarıların yanında: Bool !, ürünleri:! [AnyObject]) ->() ?, NilLiteralConvertible)' Type '(başarıların yanında : Bool !, ürünler: [AnyObject]!) ->()? ' protokole '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'
}
}
}
tür takma adı mükemmel çözümdür – Yitzchak