将NSDictionary中的值提取到单个变量

时间:2015-06-16 11:27:17

标签: ios xcode swift

我真的以为这是Xcode正在播放,因为我不能在我的生活中看到在一个相当简单的Swift代码中导致此错误的原因但重新启动清理项目后,重新启动Xcode,并重新启动我的MacBook I我仍然得到同样的错误....但为什么!! ?? !!

这是代码

// Loop through records saving them
for recordItem in records {
    if let record: NSDictionary = recordItem as? NSDictionary {                
        let time: String = record["time"] as! String
        let record: String = record["record"] as! String
        let recordId: String = record["record_id"] as! String
        let saveTime: String = record["save_time"] as! String
        let setId: String = record["set_id"] as! String

        // Does more stuff
    }
}

记录是一个NSArray,它是从远程服务器下载的数据制作的。

一切都很好,直到开始的行让recordId。这和它下面的两行给出了一个错误 - 不能下标一个'String'类型的值,其索引类型为'String'

为什么呢?为什么上面的2行没有问题?我该如何解决?

任何帮助都非常感谢,因为我有点死路一条。

2 个答案:

答案 0 :(得分:7)

您正在使用变量record来解包可选的recordItem,但之后您将record重新指定为record["record"] - 所以从这一点开始它就变成了一个字符串,而不是字典 - 导致错误消息无法下标类型的值'字符串'索引类型为' String'

您只需更改其中一个record变量

即可
for recordItem in records {
    if let unwrappedRecord: NSDictionary = recordItem as? NSDictionary {
        let time: String = unwrappedRecord["time"] as! String
        let record: String = unwrappedRecord["record"] as! String
        let recordId: String = unwrappedRecord["record_id"] as! String
        let saveTime: String = unwrappedRecord["save_time"] as! String
        let setId: String = unwrappedRecord["set_id"] as! String

        // Does more stuff
    }
}

答案 1 :(得分:1)

问题在于此处,您宣布recordString,之前为NSDictionary,由于范围record中的record["record_id"]为{ {1}}不是String。快速修复是像我一样更改名称

NSDictionary