Ist es möglich, einen Abschluss zu erzwingen? Genauso wie eine Funktion mit einem Rückgabewert immer zurückkehren MUSS, wäre es ace, wenn es eine Möglichkeit gäbe, eine Closure dazu zu bringen, die Syntax zu enthalten, die notwendig ist, um immer abgeschlossen zu werden.Schnellverschlüsse - erzwingen, dass ein Verschluss immer geschlossen wird
Zum Beispiel dieser Code nicht kompilieren, da die Funktion nicht immer einen Wert zurück:
func isTheEarthFlat(withUserIQ userIQ: Int) -> Bool {
if userIQ > 10 {
return false
}
}
In genau der gleichen Art und Weise, ich möchte eine Funktion mit einem Verschluss definieren, die kompiliert auch nicht, wenn die Schließung nie zurückkehrt. Zum Beispiel könnte der Code unten nie completionHandler zurück:
func isTheEarthFlat(withUserIQ userIQ: Int, completionHandler: (Bool) -> Void) {
if userIQ > 10 {
completionHandler(false)
}
}
Der obige Code kompiliert, aber ich frage mich, ob es ein Schlüsselwort ist, die erzwingt, dass der Verschluss in allen Fällen einen Abschluss-Handler sendet. Vielleicht hat es etwas mit der Void
in der obigen Funktion zu tun?
Nicht ein Sprachniveau, obwohl ich eine interessante Vorstellung davon, wie es erreichen könnte . Lassen Sie mich ein paar Sachen ausprobieren – Alexander
Können Sie nicht einfach den Completion-Handler am Ende der Methode aufrufen? – Sweeper
@Sweeper Die meisten unserer Completion-Handler werden für den Serverzugriff verwendet, sodass sie (1) alle aufgetretenen Fehler und (2) die Daten vom Server zurückgeben. Da ein Serverfehler nicht derselbe Fehler ist, den wir dem Benutzer zeigen wollen, haben wir oft eine Menge von Funktionen, die entscheiden, was der Fehler ist, und ebenso wollen wir vielleicht die vom Server zurückgegebenen Daten auf eine bestimmte Art und Weise manipulieren. Ich möchte nur, dass der Compiler sicherstellt, dass der Completion-Handler in allen Zweigen des Codes aufgerufen wird - genau so, wie ein Rückgabewert in einer normalen Funktion zurückgegeben werden muss. – theDuncs