[解決済み] Swift: switch ケースでオプションの値に対するテストを行う
2022-11-28 13:31:10
質問
Swift では、どのように switch 文のケースを書けば、切り替えられる値を
任意
を含む場合、ケースをスキップします。
nil
?
このようなイメージです。
let someValue = 5
let someOptional: Int? = nil
switch someValue {
case someOptional:
// someOptional is non-nil, and someValue equals the unwrapped contents of someOptional
default:
// either, someOptional is nil, or someOptional is non-nil but someValue does not equal the unwrapped contents of someOptional
}
この通りに書くと、コンパイラーは
someOptional
がアンラップされていないと文句を言われますが、明示的にアンラップするために
!
を末尾につけて明示的にアンラップすると、もちろん
someOptional
が含まれていると
nil
. 追加する
?
の代わりに
!
は、(オプショナルチェイニングの精神に則り)私にはいくらか意味がありますが、コンパイラーエラーが消えるわけではありません(つまり、実際にオプショナルをアンラップするわけではないのです)。
どのように解決するのですか?
オプショナルは、単に
enum
のようなものです。
enum Optional<T> : Reflectable, NilLiteralConvertible {
case none
case some(T)
// ...
}
ということで、通常通りマッチングさせることができます。 "関連する値" というマッチングパターンがあります。
let someValue = 5
let someOptional: Int? = nil
switch someOptional {
case .some(someValue):
println("the value is \(someValue)")
case .some(let val):
println("the value is \(val)")
default:
println("nil")
}
からのマッチが必要な場合
someValue
にマッチさせたい場合は
ガード式
:
switch someValue {
case let val where val == someOptional:
println(someValue)
default:
break
}
そしてSwift >2.0のために
switch someValue {
case let val where val == someOptional:
print("matched")
default:
print("didn't match; default")
}
関連
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
[解決済み】Swiftのオプション値とは何ですか?
-
[解決済み] クラス 'ViewController' は swift で初期化されません。
-
[解決済み] UIViewの定高制約をプログラムで更新するには?
-
[解決済み] Swift 3で現在の日付を取得する?[クローズド]
-
[解決済み] Swiftで警告を消すには?
-
[解決済み] Swiftスクリプトでターミナルコマンドを実行するには?(例:xcodebuild)
-
[解決済み] Swift で UIViewController のサブクラス用のカスタムイニシャライザを作るには?
-
[解決済み] SwiftでNSDatesの秒数の差を整数値で求める。
-
[解決済み] Swiftでenumの関連値を無視して比較する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Swiftがエラーを報告。アボートトラップ:6
-
[解決済み] Protocol ... can only be used as generic constraint because it has Self or associated type requirements "とは、どういう意味ですか?
-
[解決済み] クラス 'ViewController' は swift で初期化されません。
-
[解決済み] UIViewの定高制約をプログラムで更新するには?
-
[解決済み] Swift 3で現在の日付を取得する?[クローズド]
-
[解決済み] Swiftスクリプトでターミナルコマンドを実行するには?(例:xcodebuild)
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える
-
[解決済み] ボタンを無効化する
-
[解決済み] SwiftUIのForEachでインデックスを取得する