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

365*_*uns 2 xcode ios swift

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

这是代码

// 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
    }
}
Run Code Online (Sandbox Code Playgroud)

records是一个NSArray,它是从远程服务器下载的数据制作的.

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

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

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

Pau*_*w11 7

您正在使用该变量record来解包该可选项,recordItem但之后您将重新分配recordrecord["record"]- 所以从这一点开始它就变成了一个字符串,而不是一个字典 - 导致错误消息无法下标一个索引类型为'String'的值输入'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
    }
}
Run Code Online (Sandbox Code Playgroud)