(SKNode)不能转换为字符串(它使用旧的xCode)

时间:2015-06-02 13:08:51

标签: ios xcode swift nsarray updates

在我的应用程序中,我正在使用这段代码并且它运行良好:

var data3: NSArray = [] //1
for gg  in data3{ //2
    var hh:String = gg["percentage"] as String //3
    perchomerec = hh.toInt()! //4
}

现在我更新了我的xCodeOSx版本,现在这段相同的代码会出现此错误(在线// 3):

  

[SKNode]无法转换为String

我需要改变什么?

3 个答案:

答案 0 :(得分:1)

由于Swift 1.2 as运算符只能用于向上转换。在向下转发时,您应该使用as!as?(详细说明可以在The Swift Programming Language中找到)。

var hh:String = gg["percentage"] as! String

答案 1 :(得分:0)

听起来你需要使用!?,尽管从Jakub Vano的回答中可以看出使用可选的展开会更适合你的代码。如果您不希望hh不是String或不是nil,那么我还建议您在其他地方检查您的代码。

var data3: NSArray = []
for gg  in data3 {
  if let h = hh as? String {
    perchomerec = h.toInt()!
  }
}

答案 2 :(得分:0)

根据您对我的评论的回复,

data3似乎属于[[String:Int]]类型。

所以通过将NSArray更改为[[String:Int]]或者只是简单地删除NSArray并让Swift自己确定类型。

我猜你的问题是伪代码所以我猜你是如何设置data3的数据的:

let data3 = [["percentage" : 33]] // Swift will determine this type to: [[String:Int]]

for gg in data3 { // gg will become [String:Int]
    perchomerec = gg
}

或者如果您仍然需要NSArray类型然后在for循环中转换gg,则必须自行转换数组:

for gg in data3 as! [[String:Int]]

修改

如果数组发生变化,那么它必须是NSArray[AnyObject],然后你必须测试为每种可能的类型进行强制转换。

for gg in data3 {
    if let dict = gg as? NSDictionary {
        if let str = dict["percentage"] as? String, nr = str.toInt() {
            perchomerec = nr
        }
        else if let nr = dict["percentage"] as? Int {
            perchomerec = nr
        }
    }
}