我有一个字典数组,我尝试使用以下键之一使用前缀进行过滤:
let b = [["id":1,"name":"India"],["id":2,"name":"america"],["id":3,"name":"africa"],["id":4,"name":"indonesia"],["id":5,"name":"jakarta"],["id":6,"rec_name":"Zimba"]]
let g = b.filter({String(describing: $0["name"]).hasPrefix("I")})
print(g) //retun Empty array
如果我尝试使用 contains
然后它工作正常
或
如果我只尝试使用纯字符串数组,那么它也能正常工作
谢谢,
最佳答案
由于您的数组 (b
) 包含字典,其中 name
并不总是存在(您有一个带有 rec_name
的对象),您可以修改你的过滤器是这样的:
let g = b.filter {
guard let name = $0["name"] as? String else { return false }
return name.hasPrefix("I")
}
从而确保只有具有该键值的字典才会被您的过滤器匹配
有趣的事实:当我们做这样的事情时,原始代码不起作用的原因(正如 Martin 指出的那样)非常明显:
let g = b.map({String(describing: $0["name"])})
print(g)
打印:
["Optional(\"India\")", "Optional(\"america\")", "Optional(\"africa\")", "Optional(\"indonesia\")", "Optional(\"jakarta\")", "nil"]
关于arrays - "hasPrefix"在 Swift 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317140/