奇怪的是,为什么我会收到这个错误:

enter image description here

如果我声明只有对象可以符合协议:

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

然后try 实例化该协议的NSHashTableoF:

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

我得到了一个错误:

"NSHashTable"要求"Any DayViewStateUpdating"为类类型

any DayViewStateUpdating肯定是类类型,因为它早些时候被声明为AnyObject.还是我错过了什么?

上下文中文件的源代码:DayViewState

推荐答案

NSHashTable期待的是客观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>]

Ios相关问答推荐

如何在进行滑动删除操作时保持自定义视图背景静态

如何从ipad获取用户定义的设备名称,IOS版本应大于16在flutter

GraphQL iOS Apollo客户端自动持久化查询导致崩溃

如何通过点击按钮滚动到 ScrollView 中的特定视图?

SwiftUI 故障/错误 - 在 LazyVStack 和 ScrollView 中使用 AVPlayer 时状态栏不显示

使用按位|带有布尔操作数

一对多关系 Firebase 实时数据库(嵌入数百万条 comments )

过渡动画在 iOS16 中不起作用,但在 iOS15 中起作用

视图之间的 SwiftUI 过渡,没有过渡

SwiftUI - 使用切换switch 切换键盘类型(默认/数字)?

如何判断 `NSManagedObject` 是否已被删除?

当键盘出现在 iOS 中时,将 UIView 上移

使用 convertPoint 获取父 UIView 内的相对位置

iOS Swift - 获取当前本地时间和日期时间戳

命令 /Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 失败,退出代码为 1

呈现和关闭模态视图控制器

如何计算 Swift 数组中元素的出现次数?

什么是强属性属性

使用 swift 3 在 UIView 上添加阴影

打开 XIB 文件后 Xcode 6.3 冻结/挂起