[解決済み] フォーインループの型鋳造
質問
このようなfor-inループがあります。
for button in view.subviews {
}
今度は、ボタンをカスタムクラスにキャストして、そのプロパティを使用できるようにしたい。
私はこれを試してみました。
for button in view.subviews as AClass
しかし、それは動作しませんし、私にエラーを与える。
'AClass' does not conform to protocol 'SequenceType'
そして、私はこれを試してみました。
for button:AClass in view.subviews
しかし、どちらもうまくいきません。
どのように解決するのですか?
以下のような場合 Swift 2 以降のバージョンでは
Swift 2 では ケースパターン に に対して ループを使用することで、さらに簡単かつ安全にキャストをタイプすることができます。 for ループの中でキャストを入力するのがより簡単で安全になります。
for case let button as AClass in view.subviews {
// do something with button
}
でできることよりも、なぜこの方が良いのでしょうか? Swift 1.2 およびそれ以前よりも優れているのでしょうか? それは ケースパターン を使うと、コレクションの中から特定の型を選ぶことができます。 探している型にしかマッチしないので、配列に混在している場合、特定の型にのみ操作することができます。
例えば
let array: [Any] = [1, 1.2, "Hello", true, [1, 2, 3], "World!"]
for case let str as String in array {
print(str)
}
出力します。
Hello World!
について Swift 1.2 :
この場合、キャストしている
view.subviews
であって
button
でないので、必要な型の配列にダウンキャストする必要があります。
for button in view.subviews as! [AClass] {
// do something with button
}
注意:もし基礎となる配列の型が
[AClass]
でない場合、これはクラッシュします。 これは
!
にある
as!
はあなたに伝えています。 もし型について確信が持てない場合は、条件付きキャストの
as?
というオプションのバインディングと共に
if let
:
if let subviews = view.subviews as? [AClass] {
// If we get here, then subviews is of type [AClass]
for button in subviews {
// do something with button
}
}
について Swift 1.1 およびそれ以前のバージョンでは
for button in view.subviews as [AClass] {
// do something with button
}
注意: これは、サブビューがすべて
AClass
. 上記の安全な方法は、Swiftの以前のバージョンでも動作します。
関連
-
[解決済み] ステートメント: %%i '現時点では予期しない' を表す一行。
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Javaでenumを繰り返し処理するためのforループ
-
[解決済み] 純粋な」Swift で弱いプロトコル参照を作るには (@objc なしで) どうしたらいいですか?
-
[解決済み】ループ内のプリインクライメントとポストインクライメントの違い?
-
[解決済み] Swiftでカスタムメッセージを持つエラー/例外をスローする最も簡単な方法?
-
[解決済み] 関数のパラメータとしてクラス型を渡す方法
最新
-
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 実装 サイバーパンク風ボタン