我可以理解该语句,但由于足以强制转换任何类型,为什么后面跟着一个问号,例如:
if let foo = object as? String
Run Code Online (Sandbox Code Playgroud)
真是烦死我了。这是否意味着对象是可选的,或者变量的返回值foo是一个可选的字符串类型?或者它真的只是一种语言语法没有任何意义?它一定意味着什么,否则为什么它首先存在?这是什么意思?if let语句中单词后的问号。
我搜索过,没有找到。
我很困惑当然我知道object它已经是一个可选的并被分配给变量foo然后if let如果它可以解开就解开它,或者跳出以下语句。
所以if let解包过程是在as?类型转换之后发生的吗?在as?从示例中转换可选字符串之后,然后if let解开那个不是分配给变量的可选对象类。
您的代码:
if let foo = object as? String
Run Code Online (Sandbox Code Playgroud)
分为两个重要部分:object as? String和if let。
第一个是向下转型,它通过生成可选类型(此处)来允许失败String?。来自Swift 编程语言 (Swift 3.1):类型转换:
as?当您不确定向下转换是否会成功时,请使用类型转换运算符 ( )的条件形式。这种形式的运算符将始终返回一个可选值,nil如果无法进行向下转换,则该值将是。这使您能够检查成功的向下转型。
第二个, if let, 是一个可选绑定,它解开一个可选值,if let只有在解包的可选值没有nil并且绑定变量绑定到解包值时,才会执行的主体。请参阅Swift Programming Language (Swift 3.1): Basics中的Optional Binding。
所以你认为这里发生了两次是正确的。转换as?可能会失败并产生一个nil可选值,if let将测试该可选值nil。我们只能希望编译器处理 和 的组合,if let并且as?实现实际上不会创建和销毁不必要的选项。
HTH
| 归档时间: |
|
| 查看次数: |
1378 次 |
| 最近记录: |