【问题标题】:Swift 3 : Error: Type 'Any' has no subscript memberSwift 3:错误:类型“任何”没有下标成员
【发布时间】:2016-09-17 10:17:33
【问题描述】:

我更新到 Swift 3 并收到此错误,但无法解决。

类型 'Any' 没有下标成员

我已经阅读了答案:

39480150 - 38956785 - 39516199

但我无法用答案解决我的问题。

这是我的代码:

let pathperdataselezionata = Bundle.main.path(forResource: "Annuale", ofType: "plist")
let dictperdataselezionata = NSDictionary(contentsOfFile: pathperdataselezionata!) as![String:AnyObject]
let valoridataodierna = dictperdataselezionata[annoscelto]?[mesescritto]?![daymonth?] as? [Double]
let Grad = Int(valoridataodierna![0])
let Ampo:Double = valoridataodierna![1]

我得到了在线错误:

let valoridataodierna

非常感谢任何帮助。

谢谢。

【问题讨论】:

  • [String:AnyObject] 有 3 个下标。应该是 [String:[AnyObject]] 吗?
  • 编译器需要知道all下标对象的类型。既然数据来自包中的一个文件,为什么要使用问号?如果您遇到运行时错误,则说明您的设计非常糟糕。

标签: ios swift nsdictionary swift3


【解决方案1】:

像这样试试。

let dictperdataselezionata = NSDictionary(contentsOfFile: pathperdataselezionata!) as! [String:[String:[String:AnyObject]]]
let valoridataodierna = dictperdataselezionata[annoscelto]?[mesescritto]?![daymonth?] as? [Double]

【讨论】:

  • 这解决了我的问题。非常感谢。由于我的名声,我不能接受这个答案。
【解决方案2】:

看起来 Apple 的建议是使用大量变量,请参阅:Working with JSON in Swift

if let pathperdataselezionata = Bundle.main.path(forResource: "Annuale", ofType: "plist"),
    let dictperdataselezionata = NSDictionary(contentsOfFile: pathperdataselezionata) as? [String: Any],
    let dictAnnoscelto = dictperdataselezionata[annoscelto] as? [String: Any],
    let dictMesescritto = dictAnnoscelto[mesescritto] as? [String: Any],
    let daymonth = daymonth,
    let valoridataodierna = dictMesescritto[daymonth] as? [Double]
{
    let Grad = Int(valoridataodierna[0])
    let Ampo:Double = valoridataodierna[1]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    相关资源
    最近更新 更多