首页 > 解决方案 > 如何过滤和向下转换 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"
]

标签: swift

解决方案


改变

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。我确实认为这可能与快速类型推断本身有关。也许其他人可以更具体地解释一下。


推荐阅读