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

问题描述 投票:0回答:1

很好奇,为什么我会收到此错误:

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

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

ios swift foundation calendarkit nshashtable
1个回答
0
投票

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>]
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.