我尝试掌握 Swift 以及如何最好地将 nil 对象和有效对象与可选对象分开。
我有这个代码:
var my AwesomeDict = [:]()
...
... (myAwesomeDict gets populated)
...
let myOptionalObject:objectClass? = myAwesomeDict[key]
if let myUnwrappedObject = myOptionalObject {
...
} else {
println("Sorry, object is nil")
}
Run Code Online (Sandbox Code Playgroud)
当我在 if 子句两边加上括号时(我觉得它提高了可读性),XCode 会用编译器错误标记该行:
模式变量绑定不能出现在表达式中
有什么不同之处
if (let myUnwrappedObject = myOptionalObject) {
Run Code Online (Sandbox Code Playgroud)
从
if let myUnwrappedObject = myOptionalObject {
Run Code Online (Sandbox Code Playgroud)
?遗憾的是,文档没有提及 if 条件周围的大括号的效果。看来我需要使用无括号版本,但想更了解其中的原因。
好吧,这if let本身就是一种模式。因此,如果您在 if 和 let 之间放置一个括号,就会破坏该模式。
如果你这样做,Swift 会认为你想要检查它let本身。
所以简单地说:如果你使用if let不要使用括号,因为它破坏了if let模式。
根据文件:
\n\n语句的语法if是
if [condition] {\n [statements]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这里[condition]定义为:
\n\n\n\n
if-condition\xe2\x86\x92expression\xc2\xad |value-binding-pattern\xc2\xad
这里,let ...是一个“值绑定模式”。
\n\n\n\n
value-binding-pattern\xe2\x86\x92 var\xc2\xadpattern|\xc2\xad 让\xc2\xadpattern\xc2\xad
至于( ... ),它不是 avalue-binding-pattern因为它不以letnor开头var,因此它必须是一个表达式。在表达式规范中,我们唯一能找到以“开头”(和“结尾”的表达式),称为“括号表达式”。
\n\n\n\n
parenthesized-expression\xe2\x86\x92 (\xc2\xadexpression-element-list\xc2\x采用\xc2\xad)\xc2\xad
expression-element-list基本上是一个逗号分隔的表达式列表。并且表达式不包括value-binding-pattern. 这就是为什么你不能在let ....
| 归档时间: |
|
| 查看次数: |
1340 次 |
| 最近记录: |