我能理解该语句,但足以转换任何类型,为什么后跟一个问号,如:
if let foo = object as? String
这真的很烦我。这是否意味着对象是可选的或者变量 foo
的返回值是可选的字符串类型?或者它真的只是一种语言语法?它必须意味着什么,否则为什么它首先在那里?这是什么意思? if let
语句中单词后的问号。
我搜索了一下,没找到。
我很困惑当然我知道 object
已经是一个可选的并且被分配给变量 foo
然后 if let
解包它如果它可以解包,还是跳出了下面的语句。
所以 if let
解包过程发生在 as?
类型转换之后,对吗?在 as?
从示例中转换一个可选字符串之后,if let
解包它,而不是分配给变量的可选对象类。
最佳答案
您的代码:
if let foo = object as? String
分为两个重要部分:object as?字符串
和if let
。
第一个是向下转换,它通过生成一个可选类型(此处为 String?
)来允许失败。来自 The Swift Programming Language (Swift 3.1): Typecasting :
Use the conditional form of the type cast operator (
as?
) when you are not sure if the downcast will succeed. This form of the operator will always return an optional value, and the value will benil
if the downcast was not possible. This enables you to check for a successful downcast.
第二个,if let
,是一个可选的绑定(bind),它解开一个可选的,if let
的主体只有在展开的可选值不是 nil
并且绑定(bind)变量绑定(bind)到展开的值。参见 Optional Binding Swift 编程语言(Swift 3.1):基础。
所以您认为这里发生了两次的事情是正确的。 as?
转换可能会失败并产生一个 nil
可选值,if let
将测试该可选值是否为 nil
。我们只能希望编译器一起处理 if let
和 as?
的组合,并且实现不会实际创建和销毁不必要的可选值。
HTH
关于swift if let statement with as?,但为什么要用问号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44099956/