gpt4 book ai didi

通用字典类 : cannot invoke 'removeValue' with an argument list of type '(forKey K)' 的 Swift 编译器错误

转载 作者:可可西里 更新时间:2023-11-01 01:09:30 25 4
gpt4 key购买 nike

我创建了一个简单的字典类,用于跨多个线程同步访问字典。我正在使用 DispatchQueue 来同步从字典中读取和写入值。我正在使用泛型,以便它可以与任何字典类型一起使用 K:Hashable 作为键,T 作为对象。

这是一个类的例子:

public class SynchronizedDictionary<K, T> where K: Hashable {

private var accessQueue: DispatchQueue!

private var internalDict: [K: T]

init(queueName: String) {
accessQueue = DispatchQueue(label: queueName, qos: .default)
internalDict = [:]
}

func removeValue<K:Hashable>(forKey key: K) {
accessQueue.async(flags: .barrier) {
self.internalDict.removeValue(forKey: key)
}
}
}

尝试在字典类上调用 removeValue 函数时,编译器出现以下错误:“无法使用类型为‘(forKey: K)’的参数列表调用‘removeValue’

Cannot invoke 'removeValue' with an argument list of type '(forKey: K)

知道为什么我不能用通用类型调用这个 removeValue 函数吗?

最佳答案

removeValue 应该如何实现。

func removeValue(forKey key: K) {
accessQueue.async(flags: .barrier) {
self.internalDict.removeValue(forKey: key)
}
}

请注意我是如何从方法中删除通用参数 K,而是使用类声明中的通用参数 K

您不能使用 泛型类型参数 K 因为它可能与字典的键类型不同,后者是 K 来自类声明。如果你能做到这一点,这样的事情就成为可能:

SynchronizedDictionary<Int, Int>(queueName: "myQueue").removeValue(forKey: "myKey")

removeValueK 参数将被推断为String。显然这根本没有意义,所以你不能这样做。

关于通用字典类 : cannot invoke 'removeValue' with an argument list of type '(forKey K)' 的 Swift 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505437/

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