swift - 如何过滤和向下转换 Swift 字典
问题描述
我有 2 个数组。
var libraryArray = [[String: Any]()]
var searchedArray = [[String: Any]()]
我正在尝试设置搜索栏功能,但它始终显示不同的错误。
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchedArray = downloadManager.libraryArray.filter({($0["title"] as? String)?.prefix(searchText.count) == searchText})
songsTableView.reloadData()
}
它显示“无法下标不正确或不明确类型的值”错误。
我尝试先映射然后过滤,但它不起作用(也许我写错了)。
这是我的“libraryArray”的一个例子
[
"link": https://www.youtube.com/embed/Fm8FJ8la2VU,
"id": yt_Fm8FJ8la2VUJHIBDACDIFJFB,
"duration": 00:47,
"artists": <__NSCFArray 0x6000012a1140>(),
"fileExtension": m4a,
"title": "Amazing Jumbo Elephant Landing"
]
解决方案
改变
searchedArray = downloadManager.libraryArray.filter({($0["title"] as? String)?.prefix(searchText.count) == searchText})
至
searchedArray = libraryArray.filter({ (element) -> Bool in
guard let value = element["title"] as? String else {
return false
}
return value.prefix(searchText.count) == searchText
})
然后你的编译器就不会抱怨了。在操场上测试,Xcode 版本 11.6。我确实认为这可能与快速类型推断本身有关。也许其他人可以更具体地解释一下。
推荐阅读
- javascript - 如何在 axios 中设置多个授权标头?
- jenkins - Jenkinsfile 中的方法在完成前退出
- azure-cosmosdb - azure cosmosdb change feed 内部通信如何工作?
- javascript - Chrome:未捕获的类型错误:无法读取未定义的属性“替换”
- python - pydicom 中的 ds.get() 和 ds.get_item() 有什么区别
- reactjs - Apollo 客户端使用 hoc 和 TypeScript 访问组件道具
- php - 在我的 PHP 脚本中,REMOTE_ADDR 给出了我的真实地址,但在 Google 中使用 whatsmyip 会显示我的 VPN 地址
- reactjs - 完全反应状态管理
- java - 在模块路径上运行 OptaPlanner
- ios - 白色面板在独立模式下从 PWA 底部双击