wake-up-neo.com

Zugriff auf globale Variablen in dispatch_async nicht möglich: "Variable ist nicht zuweisbar (fehlender _block-Typ-Bezeichner)"

In meinem dispach_async-Code block kann ich nicht auf global variables Zugreifen. Ich erhalte die Fehlermeldung Variable is not Assignable (missing _block type specifier).

NSString *textString;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
   (unsigned long)NULL), ^(void) {
        textString = [self getTextString];
});

Kann mir jemand helfen, den Grund herauszufinden?

49
Vaquita

Sie müssen den __block-Bezeichner verwenden, wenn Sie eine Variable in einem Block ändern, sodass der von Ihnen angegebene Code stattdessen wie folgt aussehen sollte:

 __block NSString *textString;
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                                 (unsigned long)NULL), ^(void) {
      textString = [self getTextString];
});

Blöcke erfassen den Status der Variablen, auf die in ihren Körpern verwiesen wird. Daher muss die erfasste Variable als veränderlich deklariert werden. Und Mutabilität ist genau das, was Sie brauchen, wenn Sie bedenken, dass Sie diese Sache im Wesentlichen festlegen.

137
CodaFi