【发布时间】:2017-02-27 00:09:21
【问题描述】:
这个SO post 很好地解释了如何解决创建delegate 即weak 的问题。
基本上有两种方法:
使用 @objc 关键字:
@objc protocol MyClassDelegate {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
使用 :class 关键字:
protocol MyClassDelegate: class {
}
class MyClass {
weak var delegate: MyClassDelegate?
}
我正在尝试做一些研究,以了解这两种方法之间到底有什么区别。 docs 非常清楚如何使用@objc:
要在 Objective-C 中可访问和可用,Swift 类必须是 Objective-C 类的后代,或者必须标记为
@objc。
但是,我在任何地方都找不到有关 :class 实际作用的信息。仔细考虑整个概念,实际上并没有多大意义。我的理解是class 是 Swift 中声明类的关键字。因此,这里似乎我们使用关键字 class 本身作为协议(因为我们在协议声明后的 : 之后附加它)。
那么,为什么这在语法上甚至可以工作,它到底是做什么的?
【问题讨论】:
-
也许在这种情况下也很有趣:What's the difference between a protocol extended from AnyObject and a class-only protocol?(答案似乎是“无”)。
-
@MartinR 前两个链接的问答对我来说看起来像是合适的欺骗目标,所以我应该投票关闭第一个,然后你用第二个欺骗锤子(这样(我认为)链接)?
-
在 Swift 书中查找“仅类协议”。
标签: ios objective-c swift