在我的应用程序中,我正在使用这段代码并且它运行良好:
var data3: NSArray = [] //1
for gg in data3{ //2
var hh:String = gg["percentage"] as String //3
perchomerec = hh.toInt()! //4
}
现在我更新了我的xCode
和OSx
版本,现在这段相同的代码会出现此错误(在线// 3):
[SKNode]无法转换为String
我需要改变什么?
答案 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
}
}
}