很好奇,为什么我会收到此错误:
如果我声明只有对象才能符合协议:
public protocol DayViewStateUpdating: AnyObject {
func move(from oldDate: Date, to newDate: Date)
}
然后尝试实例化该协议的
NSHashTable
:
private var clientsHashTable = NSHashTable<DayViewStateUpdating>.weakObjects()
我收到错误:
“NSHashTable”要求“任何 DayViewStateUpdating”是类类型
但是 any DayViewStateUpdating 保证是类类型,因为它之前已声明为 AnyObject。还是我错过了什么?
上下文中文件的源代码:DayViewState
NSHashTable
期待 Objective-C 风格的协议,而不是 Swift 风格的协议存在。
将您的协议标记为
@objc protocol DayViewStateUpdating
即可。但实际上,你可以在这里不需要 NSHashTable
,通过使用 Weak
包装器,如下所示:
public struct Weak<T: AnyObject> {
weak var object: T?
init(_ object: T) { self.object = object }
}
private var clientsHashTable = [Key: Weak<DayViewStateUpdating>]