我试图让code from github自动完成工作,但是我遇到第6行(data.filter)上的错误,即Dictionary没有名为filter的成员。但是我在文档中读到的所有内容都表明字典应该有一个过滤方法。我已经尝试了解包,自我等各种可能的组合,但编译器会将这些更改注册为错误。
显然有些事情我不明白 - 任何指导都值得赞赏。
var data = Dictionary<String, AnyObject>()
func applyFilterWithSearchQuery(filter : String) -> Dictionary<String, AnyObject>
{
var lower = (filter as NSString).lowercaseString
if (data.count > 0) {
var filteredData = data.filter ({
if let match : AnyObject = $0["DisplayText"]{
return (match as NSString).lowercaseString.hasPrefix((filter as NSString).lowercaseString)
}
else{
return false
}
})
}
return filteredData
}
答案 0 :(得分:1)
从未听说过字典过滤器 - 你在哪里读到过这个?数组确实有filter
方法,但没有字典。您可以做的是过滤键或值(可通过相应的字典属性访问)。
您可以使用以下代码在字典上实现自定义过滤器:
var filtered = dict.keys.filter { $0.hasPrefix("t") }.map { (key: $0, value: dict[$0]) }
var newDict = [String : AnyObject]()
for element in filtered {
newDict[element.key] = element.value
}
过滤键,然后将每个键映射到(键,值)元组,然后将每个元组添加到新词典中。
请注意,要过滤使用hasPrefix("t")
的密钥 - 请将其替换为更适合您案例的内容
答案 1 :(得分:0)
var data = Dictionary<String, AnyObject>()
func applyFilterWithSearchQuery(filter: String) -> [String : AnyObject] {
var lower = filter.lowercaseString
var filteredData = [String : AnyObject]()
if (!data.isEmpty) {
Swift.filter(data) {
(key, value) -> Bool in
if key == "DisplayText" {
filteredData[key] = (value as? String)?.lowercaseString.hasPrefix(lower)
}
return false
}
/* use map function works too
map(data) {
(key, value) -> Void in
if key == "DisplayText" {
filteredData[key] = (value as? String)?.lowercaseString.hasPrefix(lower)
}
}
*/
}
return filteredData
}