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