web-dev-qa-db-ja.com

dispatch_asyncのグローバル変数にアクセスできません:「変数は割り当て可能ではありません(_blockタイプ指定子がありません)」

私のdispach_asyncコードblockでは、_global variables_にアクセスできません。このエラー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];
});
_

誰でも私が理由を見つけるのを助けることができますか?

49
Vaquita

ブロック内の変数を変更するときは__block指定子を使用する必要があるため、指定したコードは次のようになります。

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

ブロックは、本体内で参照される変数の状態をキャプチャするため、キャプチャされた変数は可変と宣言する必要があります。そして、本質的にこのことを設定していることを考えると、可変性はまさにあなたが必要とするものです。

137
CodaFi