Соответствие шаблону и условное связывание в одном операторе Switch
Есть ли способ написать это if
/else if
/else
Лестница как заявление переключателя?
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
заявление?
1 ответ
Решение
Конечно, вы можете использовать условную модель приведения case let x as Type
:
let x: Any = "123"
switch x {
case let s as String:
print(s) //use s
case let i as Int:
print(i) //use i
case let b as Bool:
print(b) //use b
default:
fatalError()
}