swift - 如何在 'pure' Swift 中创建一个弱协议(protocol)引用(没有@objc)

标签 swift delegates swift-protocols

weak 引用在 Swift 中似乎不起作用,除非将 protocol 声明为 @objc,我不希望这样纯 Swift 应用。

此代码给出编译错误(weak cannot be applied to non-class type MyClassDelegate):

class MyClass {
  weak var delegate: MyClassDelegate?
}

protocol MyClassDelegate {
}

我需要在协议(protocol)前加上@objc,然后它就可以工作了。

问题:完成 delegate 的“纯”Swift 方法是什么?

最佳答案

您需要将协议(protocol)的类型声明为AnyObject

protocol ProtocolNameDelegate: AnyObject {
    // Protocol stuff goes here
}

class SomeClass {
    weak var delegate: ProtocolNameDelegate?
}

使用 AnyObject 你说只有类可以符合这个协议(protocol),而结构或枚举不能。

关于swift - 如何在 'pure' Swift 中创建一个弱协议(protocol)引用(没有@objc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24066304/

相关文章:

ios - Swift:如何使用 UISwitch 来控制 UITextField 通过委托(delegate)启用或禁用

swift - 协议(protocol)扩展类型 Self 与初始值设定项类型不匹配

swift - Sprite 节点不检测触摸?

iphone - 快速编程 - Storyboard如何在 View Controller 上添加更多按钮

ios - 应用旋转时自定义相机 View 覆盖尺寸问题

javascript - jQuery:委托(delegate)总是比直接函数绑定(bind)更好

ios - 在 iOS6 中使用委托(delegate),我将如何在概念上设计一个允许我添加和编辑任务的待办事项列表委托(delegate)?

c# - 为什么我无法访问属于不同类型成员的事件的成员?

java - 具有 associatedtype 协议(protocol)的数组

swift - 我如何定义 Swift 协议(protocol),以便实现可以是属性或方法?