gpt4 book ai didi

ios - Swift 过滤器字典错误 : Cannot assign a value of type '[(_, _)]' to a value of type '[_ : _]'

转载 作者:IT王子 更新时间:2023-10-29 04:59:29 30 4
gpt4 key购买 nike

我正在尝试快速过滤字典:

var data: [String: String] = [:]
data = data.filter { $0.1 == "Test" }

上面的过滤器代码在 Swift 2 下编译但产生以下错误:

Cannot assign a value of type '[(String, String)]' to a value of type '[String : String]'

这是 Swift 编译器中的错误还是这不是在 Swift 中过滤字典的正确方法?

最佳答案

这已在 Swift 4 中修复

let data = ["a": 0, "b": 42]
let filtered = data.filter { $0.value > 10 }
print(filtered) // ["b": 42]

在 Swift 4 中,过滤后的字典返回一个字典。


Swift 2 和 3 的原始答案

问题是 data 是一个字典,而 filter 的结果是一个数组,所以报错说你不能给后者的结果赋值前者。

您可以为结果数组创建一个新的变量/常量:

let data: [String: String] = [:]
let filtered = data.filter { $0.1 == "Test" }

这里 filtered 是一个元组数组:[(String, String)]

过滤后,如果需要,您可以重新创建一个新词典:

var newData = [String:String]()
for result in filtered {
newData[result.0] = result.1
}

如果您决定不使用filter,您可以改变您的原始字典或其副本:

var data = ["a":"Test", "b":"nope"]
for (key, value) in data {
if value != "Test" {
data.removeValueForKey(key)
}
}
print(data) // ["a": "Test"]

注意:在 Swift 3 中,removeValueForKey 已重命名为 removeValue(forKey:),因此在此示例中它变为 data.removeValue(forKey : 键)

关于ios - Swift 过滤器字典错误 : Cannot assign a value of type '[(_, _)]' to a value of type '[_ : _]' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32604897/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com