[解決済み] enumerateObjectsUsingBlock: の BOOL *stop 引数は何に使うのですか?
2023-04-04 23:28:05
質問
私はこれまで
enumerateObjectsUsingBlock:
をよく使うのですが、その使い方を理解するのに苦労しています。
BOOL *stop
の使い方を理解するのに苦労しています。
は
NSArray
クラスのリファレンスでは
stop
: ブール値への参照。ブロックはこの値をYES
に設定する。 に設定すると、配列のさらなる処理を停止します。このときstop
引数はout-onlyです。 引数です。このブール値をYES
に設定するだけです。 ブロック内で
そうすると、もちろんブロック内に以下を追加して、列挙を停止させることができます。
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
私が調べたところでは、明示的に
*stop
を
YES
は、特に悪い副作用はありません。列挙は配列の終わりで自動的に停止するようです。ですから
*stop
を使うことは本当に必要なのでしょうか?
どのように解決するのですか?
この
stop
をブロックに渡すと、列挙を停止させることができます。
早々に
. これは、以下のものと同等です。
break
に相当し、通常の
for
のループと同じです。配列のすべてのオブジェクトを通過させたい場合は、これを無視してもかまいません。
for( id obj in arr ){
if( [obj isContagious] ){
break; // Stop enumerating
}
if( ![obj isKindOfClass:[Perefrigia class]] ){
continue; // Skip this object
}
[obj immanetizeTheEschaton];
}
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if( [obj isContagious] ){
*stop = YES; // Stop enumerating
return;
}
if( ![obj isKindOfClass:[Perefrigia class]] ){
return; // Skip this object
}
[obj immanentizeTheEschaton];
}];
これは呼び出し側のスコープから変数への参照であるため、outパラメータとなります。ブロックの内部で設定する必要がありますが、読み込みは
enumerateObjectsUsingBlock:
の内部で読み込む必要があります。
NSError
はフレームワークの呼び出しからあなたのコードに一般的に引き渡されます。
- (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop))block {
// N.B: This is probably not how this method is actually implemented!
// It is just to demonstrate how the out parameter operates!
NSUInteger idx = 0;
for( id obj in self ){
BOOL stop = NO;
block(obj, idx++, &stop);
if( stop ){
break;
}
}
}
関連
-
[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] synthesize vs @dynamic、その違いとは?
-
[解決済み] 現在の日付から7日分を差し引いた日数
-
[解決済み] このgdbの出力は何を意味しているのでしょうか?
-
[解決済み] ベストプラクティス - 自分のプロジェクト/アプリのためのNSErrorドメインとコード
-
[解決済み] NSSetからNSMutableArrayを返す方法
-
[解決済み] UIButtonのテキストを変更する
-
[解決済み] iOS8 - 高さがゼロであることを示唆する曖昧な制約
-
[解決済み] writeToFile:atomically:はデータを上書きするのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NSPredicate: NSDateプロパティの日によるオブジェクトのフィルタリング
-
[解決済み] Objective-Cでコールバックを実行する方法
-
[解決済み] なぜObjective-Cはプライベートメソッドをサポートしないのですか?
-
[解決済み] 2つの日付の差を計算するにはどうすればよいですか?
-
[解決済み] switch文の中で変数を宣言する [重複]。
-
[解決済み] UIButtonsの背景色を変更することはできますか?
-
[解決済み] MKMapViewのアノテーションをすべて削除する方法
-
[解決済み] Objective-Cでの文字列比較
-
[解決済み] NSIntegerをint型に変換するには?
-
[解決済み] Objective-CのクラスからSwiftの関数を呼び出す