Swift 1.2结果为'?'必须跟着调用,成员查找或下标

时间:2015-05-03 17:03:24

标签: ios swift optional

更新到Swift 1.2 / Xcode 6.3会导致以下错误:

enter image description here

了解1.1和1.2之间发生的变化的人是否可以帮助解决这里发生的事情?所有帮助赞赏!感谢您阅读此内容!

1 个答案:

答案 0 :(得分:1)

在Swift 1.2中,跟随?的变量来打开它是违法的。 ?用于可选链,然后必须跟随方法调用,成员查找(即属性)或下标,如错误消息所示。

在您添加的评论中:

  

如果我删除“?”代码符合ok但是在节点时会发生什么   没有名字?

String?与文字String值进行比较而不首先展开变量是完全有效的。如果可选项为nil,则nil不等于任何文字String,因此if将失败。

在Swift Playground中尝试以下操作:

var str: String? = nil

if str == "hello" {
    println("it is hello")
} else {
    println("not hello")  // prints "not hello"
}

// Here we reassign str, but it is still a String?    
str = "hello"

if str == "hello" {
    println("it is hello")  // prints "it is hello"
} else {
    println("not hello")
}

只需将paintedNode.name"paintedArea"进行比较即可完全安全,如果该节点没有名称,则paintedNode.name将为nil,{{1}将失败,就好像它有一个不同的名字。