'as'测试在Swift switch语句中始终是真正的警告

vac*_*ama 1 swift swift3

我正在使用as Int一个switch案例解开一个可选项.它有效,但编译器会发出警告'as'测试始终为true.这当然是谎言,因为as只有价值不成功才能成功nil.

考虑这个最小的,可验证的例子:

var age: Int?

switch age {
case let y as Int:    // warning: 'as' test is always true
    print(y)
case nil:
    print("it is nil")
}
Run Code Online (Sandbox Code Playgroud)

输出:

它没有

问题:什么是斯威夫特在这里用这个警告思考,是否有更好的方法来解开价值而不必使用力量展开?

mat*_*att 7

这是一个由as Int- 带来的错误- 因为如果y不是nil,它肯定是一个Int.

在这种情况下正确的语法("有没有更好的方法来解开值而不必使用强制解包")是:

    switch age {
    case let y?:
        print(y)
    case nil:
        print("it is nil")
    }
Run Code Online (Sandbox Code Playgroud)