Почему не работает? Поскольку оператор switch должен иметь список значений для сравнения, а не выражения:
let number = 10
switch number {
case 1:
print("one")
case 2:
print("two")
default:
print("too big for me")
}
Как исправить: Вы можете сделать то, что предложил @emlai, и использовать оператор if-let
:
if let name = name {
print("Hello \(name)")
} else {
print("Hello, anonymous")
}
Или, если вам нужно использовать оператор switch, вы можете сделать любой из этих:
//this is as close as to what you are doing
switch name {
case _ where name != nil:
print("Hello \(name!)")
default:
print("Hello, anonymous")
}
//this binds name to a non-optional variable called actualName
switch name {
case let actualName where actualName != nil:
print("Hello \(actualName)")
default:
print("Hello, anonymous")
}
//this also binds name to actualName, but is more succinct
switch name {
case let actualName?:
print("Hello \(actualName)")
default:
print("Hello, anonymous")
}