我真的以为这是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行没有问题?我该如何解决?
任何帮助都非常感谢,因为我有点死路一条。
答案 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)
问题在于此处,您宣布record
为String
,之前为NSDictionary
,由于范围record
中的record["record_id"]
为{ {1}}不是String
。快速修复是像我一样更改名称
NSDictionary