swift如果让语句使用as?,为什么要使用问号?
我能理解这句话,但既然这句话足以表达任何类型的意思,为什么后面会有一个问号,如:swift如果让语句使用as?,为什么要使用问号?,swift,syntax,Swift,Syntax,我能理解这句话,但既然这句话足以表达任何类型的意思,为什么后面会有一个问号,如: if let foo = object as? String 我真的很烦。这是指对象是可选的还是变量foo的返回值是可选的字符串类型?或者它真的什么都没有,只是一种语言语法?它一定意味着什么,否则它为什么会在那里?这是什么意思?单词后面的问号,如if let语句中的问号 我搜索过了,但没有找到 我很困惑,因为我知道对象已经是可选的,并且被分配给变量foo然后如果让它展开,如果它可以展开,或者跳出下面的语句 因此
if let foo = object as? String
我真的很烦。这是指对象是可选的还是变量foo
的返回值是可选的字符串类型?或者它真的什么都没有,只是一种语言语法?它一定意味着什么,否则它为什么会在那里?这是什么意思?单词后面的问号,如if let
语句中的问号
我搜索过了,但没有找到
我很困惑,因为我知道对象
已经是可选的,并且被分配给变量foo
然后如果让它
展开,如果它可以展开,或者跳出下面的语句
因此,if let
展开过程在as之后进行?
类型转换对吗?as?
从示例中铸造一个可选字符串后,如果let正在展开该变量的非可选对象类。您的代码:
if let foo = object as? String
分为两个重要部分:对象为?字符串
和如果让
第一种是向下转换,它通过生成可选类型(String?
此处)来允许失败。发件人:
如果不确定向下转换是否成功,请使用类型转换运算符(as?
)的条件形式。这种形式的运算符将始终返回一个可选值,如果无法向下转换,则该值将为nil
。这使您能够检查是否成功向下广播
第二个,if let
,是一个可选绑定,它打开一个可选绑定,只有当要打开的可选值不是nil
并且绑定的变量绑定到打开的值时,if let
的主体才会执行。请参见Swift编程语言(Swift 3.1):基础
所以你觉得这里发生了两次是正确的。as?
强制转换可能会失败并产生一个nil
可选值,if let
将测试该可选值的nil
。我们只能希望编译器同时处理if let
和as?
的组合,并且实现不会实际创建和破坏不必要的选项
HTH奇怪,我在搜索时立即发现:请阅读“向下看”部分,非常感谢您的回答。我读书和学习。请回答我文章中最后一个编辑过的问题。@DaveNewton-您的链接是指向
as
和as?
只是在类比中提到的。你是否打算链接到上的一篇博客文章作为?
?嘿,谢谢你没有当面嘲笑他,也谢谢其他新手