【问题标题】:Type '[XYZ]!' has no subscript members输入“[XYZ]!”没有下标成员
【发布时间】:2016-12-15 02:03:58
【问题描述】:

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

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

我需要如何修改代码?

【问题讨论】:

  • 显示你的 someInfoArray。是不是像'[ [“keyOne”:1,“vf1”:0.0 ...],[“keyOne”:2,“vf1”:0.0] ...]'?
  • 我可以显示 someInfoArray,但无论它是什么“(item.valueForKey("keyOne") as!Int)”都应该是一个 Int,其余的都不重要。我错了吗?
  • 您现在可以看到 someInfoArray 的来源。

标签: ios migration swift3


【解决方案1】:

假设你的 someInfoArray 是字典数组。

'item' 现在是 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
}

【讨论】:

  • 这个答案让我走上了正确的道路,(我终于让它工作了),所以我点击它作为接受。我仍然认为错误消息不合适。它应该清楚地告诉我,我提供的下标类型不正确。
  • 我同意错误信息并不真实。请向苹果提交错误报告。
猜你喜欢
  • 2017-06-20
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 2017-07-18
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多