2016-04-19 6 views
0

die Funktion berechnen nehmen lassen() dauert 30 Sekunden, um eine intDoes mit IF LET wirken wie Schließung

Aktualisierung/bearbeiten zurückzukehren: Ich zu erwähnen vernachlässigt lassen vermuten, dies auf einem Hintergrund-Thread und nicht der Haupt-Thread .

calculate() -> Int{ 
    let anInt = ...//task that takes 30 seconds to complete 

    return anInt 

} 

Wenn ich if let bin mit bedingt den Wert berechnen zu einer Variablen binden wie unten:

if let theIntIWant = calculate() as? String { 
    print("the value I want is: \(theIntIWant)") 
} 

Wird diese if let Funktion ähnlich einem Verschluss, wo theIntIWant erst calculate() kehrt bewertet werden dessen Wert? Ich versuche zu verstehen, wann ich eine Schließung für asynchrone Aufgaben brauche und bin mir nicht sicher, ob ich sie in diesem Fall brauchen würde.

Antwort

1

Das hat nichts mit Verschlüssen zu tun, noch haben Sie etwas über calculate asynchron gesagt. Es hat auch nichts mit if let zu tun! Ihre Frage hat tatsächlich mit Threads zu tun.

Die Regeln sind einfach genug. Sie müssen den Haupt-Thread für längere Zeit nicht blockieren. Wenn calculate() die Fähigkeit hat, nach 30 Sekunden Arbeit einen Wert zurückzugeben, muss es nur auf einem Hintergrundthread aufgerufen werden. Wenn Sie, nachdem Sie es aufgerufen haben, etwas mit dem Ergebnis tun möchten, das Ihre Eigenschaften, die Schnittstelle oder andere nicht threadsichere Dinge betrifft, dann müssen Sie wieder auf den Hauptthread zugreifen.

1

Ja, theIntIWant wird nicht zugewiesen bis nach calculate() zurückgibt.

Verwandte Themen