将值从 NSDictionary 提取到各个变量



我真的认为这是 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
    }
}

记录是 NSArray,它由从远程服务器下载的数据制成。

一切都很好,直到行开始让 recordId。这和它下面的两行给出一个错误 - 无法将类型为"字符串"的值下标为"字符串"的索引

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

非常感谢任何帮助,因为我有点死胡同。

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

您只需要更改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
    }
}

问题就在这里,您将record声明为String,以前它是NSDictionary的,并且由于范围的原因,record["record_id"]中的record String不是NSDictionary。快速修复是像我一样更改名称

    let time: String = record["time"] as! String
    let record1: 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

最新更新