ios - 如何在 Swift 中创建一组委托(delegate)协议(protocol)项?

标签 ios swift

假设我有五个 UIView 对象,它们都符合特定的协议(protocol)。我有一个对象应该维护这些对象的列表,并在必要时向它们发送消息。

protocol MyProtocol: AnyObject {
    func doSomething()
}

问题是,当我将这些 UIView 添加到 Set 变量时,编译器会产生错误,因为 MyProtocol 不符合 Hashable。我能理解其中的原因,谁能想出克服这个问题的好方法?与此同时,我考虑改用 NSHashTable,但你失去了 Sets 的枚举功能。


更新答案以发布一些示例代码(这仍然不起作用)

protocol MyProtocol: class, AnyObject {
    func doSomething()
}

class MyClass {
    var observers: Set<MyProtocol> = Set<MyProtocol>()
}

最佳答案

因为您正在为类定义协议(protocol),所以您需要在继承任何其他协议(protocol)之前编写“class”关键字:

    protocol MyProtocol: AnyObject, Hashable{
         func doSomething()
    }


    class MyClass<T: MyProtocol> {

         var observers: Set<T> = Set<T>()
    }

将您的协议(protocol)更改为此,它将正常工作。 可以引用Apple Documentation了解更多详情。

关于ios - 如何在 Swift 中创建一组委托(delegate)协议(protocol)项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30883095/

相关文章:

swift - 需要在 Modal Segues 之后释放内存,但我需要两个 Segues 将数据从 A 传递到 B 以及从 B 传递到 A

ios - 移动 Safari 中的网页是否可以检查是否选择了“设置”>“Safari”>“接受 Cookie 'From visited' 或 'Always'”?

UINavigationController 中的 iOS ChildViewController = 显示状态栏

ios - 将数据存储在自定义类中的 NSArray 中并在其他类/ Controller 中使用

ios - 将数据传递给下一个 ViewController 时出错

ios - 选择/取消选择按钮 swift xcode 7

ios - iOS 上的 Auth0 : Error Domain=com. auth0 找不到用于身份验证的连接名称

ios - 锁定方向不适用于 ipad ios 8 swift xcode 6.2

ios - 如何在SwiftUI的底部创建日期选择器?

ios - 如何从应用程序内部或外部 MDM 以编程方式更改屏幕时间和隐私限制设置?