Swift completion-block
Ich bin eine harte Zeit zu verstehen, ein problem, das ich habe.
Zur Vereinfachung verwende ich UIView-Methode.
Im Grunde, wenn ich Schreibe, die Methode
UIView.animateWithDuration(1, animations: {() in
}, completion:{(Bool) in
println("test")
})
funktioniert es einwandfrei.
Nun, wenn ich die gleiche Methode, aber die Schaffung eines string, etwa so:
UIView.animateWithDuration(1, animations: {() in
}, completion:{(Bool) in
String(23)
})
Es nicht mehr funktioniert. Compiler-Fehlermeldung: Fehlende argument für den parameter 'Verzögerung' in call
Nun, hier ist der seltsame Teil. Wenn ich den genau gleichen code wie der, der scheitert, aber fügen Sie einfach einen drucken-Befehl, etwa so:
UIView.animateWithDuration(1, animations: {() in
}, completion:{(Bool) in
String(23)
println("test")
})
beginnt es wieder zu arbeiten.
Mein problem ist im Grunde dasselbe. Mein code:
downloadImage(filePath, url: url) { () -> Void in
self.delegate?.imageDownloader(self, posterPath: posterPath)
}
Nicht funktioniert. Aber wenn ich auf die.
downloadImage(filePath, url: url) { () -> Void in
self.delegate?.imageDownloader(self, posterPath: posterPath)
println("test")
}
oder auch:
downloadImage(filePath, url: url) { () -> Void in
self.delegate?.imageDownloader(self, posterPath: posterPath)
self.delegate?.imageDownloader(self, posterPath: posterPath)
}
Funktioniert es einwandfrei.
Ich kann nicht verstehen, warum dies geschieht. Ich bin in der Nähe akzeptieren, dass es zu einem compiler-Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verschlüsse in Swift implizite Renditen, wenn Sie nur aus einem einzelnen Ausdruck. Diese ermöglichen prägnante code wie diesem:
In Ihrem Fall, wenn Sie erstellen Ihren Text hier:
Sie am Ende zurückgeben, dass die string-und das macht die Signatur Ihrer Schließung:
Nicht mehr dem entspricht, was durch die erforderliche
animateWithDuration
's Signatur (was übersetzt Swift kryptischeMissing argument for parameter 'delay' in call
Fehler, weil Sie nicht finden können, eine geeignete Signatur zu passen).Leicht zu beheben, fügen Sie eine leere return-Anweisung am Ende Ihrer Schließung:
Macht deine Signatur, was es sein sollte:
Deinem letzten Beispiel:
funktioniert, weil es zwei Ausdrücke gibt es, nicht nur eine; implizite Renditen nur passieren, wenn der Verschluss einen einzelnen Ausdruck enthält. So, dass diese Schließung nicht, dass etwas zurückgegeben und das entspricht seiner Unterschrift.