输入' [XYZ]!'没有下标成员

时间:2016-12-15 02:03:58

标签: ios migration swift3

关于将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

换句话说,数组没有下标成员。我不太明白。

我如何修改代码?

1 个答案:

答案 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
}