关于将iOS应用迁移到Swift 3.0的过程。这是我面临的一个问题。
首先是相关代码:
struct OnlineBox {
var vf1,vf2:CGFloat!
var vs1:String!
}
var myOnlineInfo:[OnlineBox]!
func doSomeWork() {
myOnlineInfo = [OnlineBox](repeating: OnlineBox(vf1: 0.0, vf2: 0.0, vs1: ""), count: 11)
// below someInfoArray comes from querying a Core Data Entity:
for item in someInfoArray {
myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vf1 = item.valueForKey("vf1") as! CGFloat
myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vf2 = item.valueForKey("vf2") as! CGFloat
myOnlineInfo[(item.valueForKey("keyOne") as! Int) - 1].vs1 = item.valueForKey("vs1") as! String
}
}
第二个问题:
对于循环内的3行,我收到了这条神秘的错误消息:
Type '[OnlineBox]!' has no subscript members
换句话说,数组没有下标成员。我不太明白。
我如何修改代码?
答案 0 :(得分:0)
假设你的someInfoArray是字典数组。
'项目'现在是Dictionary的实例,它不响应valueForKey方法。
然后将其强制转换为NSDictionary以响应valueForKey。
for item in someInfoArray {
let i = item as NSDictionary
myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vf1 = i.valueForKey("vf1") as! CGFloat
myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vf2 = i.valueForKey("vf2") as! CGFloat
myOnlineInfo[(i.valueForKey("keyOne") as! Int) - 1].vs1 = i.valueForKey("vs1") as! String
}
或简单地说,
for item in someInfoArray {
myOnlineInfo[(item["keyOne"] as! Int) - 1].vf1 = item["vf1"] as! CGFloat
myOnlineInfo[(item["keyOne"] as! Int) - 1].vf2 = item["vf2"] as! CGFloat
myOnlineInfo[(item["keyOne"] as! Int) - 1].vs1 = item["vs1"] as! String
}