switch文としてif
/else if
/else
ラダーを記述する方法はありますか?1つのSwitchステートメントでパターンマッチし、条件付きでバインドする
let x: Any = "123"
if let s = x as? String {
useString(s)
}
else if let i = x as? Int {
useInt(i)
}
else if let b = x as? Bool {
useBool(b)
}
else {
fatalError()
}
ここに私の試みです:
switch x {
case let s where s is String: useString(s)
case let i where i is Int: useInt(i)
case let b where b is Bool: useBool(b)
default: fatalError()
}
それが正常に正しい道を選択したが、s
/i
/b
はタイプAny
ではまだです。 is
小切手は、キャストに影響を与えません。これにより、使用前に強制的にキャストされてas!
になります。
種類を入れ替えて名前にバインドする方法はありますか?switch
ステートメント?
あなたがやっていることは正しいが、各 'case'ための実行文が欠落しています。 'print'を追加するだけでエラーは見えません。 – Santosh
はい、それはエラーですが、デモンストレーションのために省略しました。 'print(_ :)'は 'Any'型のパラメータを扱う際には問題ありません。 '// use s'のようなコメントが実際に' String'/'Int' /' Bool'型のパラメータを取る関数呼び出しであるとします。 – Alexander
@サントシュ私は私の質問を明確にしました。 – Alexander