"hasPrefix"在Swift中不起作用

nir*_*rav 1 arrays dictionary swift

我有一个字典数组,我尝试使用其中一个键过滤前缀如下:

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
Run Code Online (Sandbox Code Playgroud)

如果我尝试,contains那么它工作正常

要么

如果我只尝试纯String数组,那么它也可以正常工作

谢谢,

All*_*ian 6

由于你的array(b)包含name并不总是存在的字典(你有一个对象rec_name),你可以修改你的过滤器:

let g = b.filter {
    guard let name = $0["name"] as? String else { return false }
    return name.hasPrefix("I")
}
Run Code Online (Sandbox Code Playgroud)

从而确保只有具有该键值的字典与您的过滤器匹配


有趣的事实:当我们做这样的事情时,原始代码不起作用的原因(正如Martin指出的那样)非常明显:

let g = b.map({String(describing: $0["name"])}) 
print(g)
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

["Optional(\"India \")","可选(\"america \")","可选(\"africa \")","可选(\"indonesia \")","可选(\" jakarta \")","nil"]