ios “NSHashTable”要求“any MyCustomProtocolAnyObject”是类类型

l0oc07j2  于 2023-10-21  发布在  iOS
关注(0)|答案(1)|浏览(87)

我很好奇,为什么我会得到这个错误:

如果我声明只有对象才能符合协议:

public protocol DayViewStateUpdating: AnyObject {
    func move(from oldDate: Date, to newDate: Date)
}

然后尝试示例化该协议的NSHashTable

private var clientsHashTable = NSHashTable<DayViewStateUpdating>.weakObjects()

我收到错误消息:
“NSHashTable”要求“any DayViewStateUpdating”是类类型
但是any DayViewStateUpdating保证是一个类类型,因为它之前被声明为AnyObject。还是我错过了什么?
在上下文中的文件的源代码:DayViewState

wnvonmuf

wnvonmuf1#

NSHashTable需要的是C2C风格的协议,而不是Swift风格的协议存在。
将您的协议标记为@objc protocol DayViewStateUpdating可以正常工作。
但实际上,您可以在这里不需要NSHashTable,通过使用Weak Package 器,如下所示:

public struct Weak<T: AnyObject> {
    weak var object: T?
    
    init(_ object: T) { self.object = object }
}

private var clientsHashTable = [Key: Weak<DayViewStateUpdating>]

相关问题