我的数据结构如下:
var songs = [String: [Song]]()
这是一个字典,其键是字符串,值是数组。我基本上按字母顺序对歌曲进行排序,因此我可以在TableView中按部分分发它们。
我希望得到这样的歌曲名称:
var sectionTitle = self.tableView(tableView, titleForHeaderInSection: indexPath.section) as String!
var songName = songs[sectionTitle][indexPath.row] as String
(错误在此行中)
但是XCode会抛出错误并说String is not convertible to DictinoaryIndex<String, [(Song)]>
答案 0 :(得分:2)
你遇到的问题是按键返回的Swift字典返回一个可选项 - 原因是,键可能不在字典中。
所以你需要以某种方式展开可选项(也就是说,检查密钥是否有效)。
尝试以下方法:
if let songName = songs[sectionTitle]?[indexPath.row] {
// use songName
}
else {
// possibly log an error
}
你也有点暴露于索引出界错误的风险,这(如果你使用Xcode 6.3)你可以防范这样:
if let songList = songs[sectionTitle] where songList.count < indexPath.row {
let song = songList[indexPathrow]
}
一般来说,你应该花一些时间来学习关于打开它们的选项和技巧,而不是过多地使用as
和!
- 如果你发现自己打开了nils,你的应用程序会随机崩溃像这样的意外。