在Swift中,协议从类关键字继承是什么意思?
例如
protocol MyDelegate: class {
}
Run Code Online (Sandbox Code Playgroud)
nhg*_*rif 14
的要点红蜘蛛的答案是正确的,但它忽略了为什么我认为这是重要的在这里.它归结为ARC和内存管理.
Swift是引用类型和值类型的语言. 类是引用类型,而其他所有类都是值类型.实际上,我们并没有真正指定协议继承自class......它更像是我们指定协议只能通过引用类型实现.
为什么这很重要?
这很重要,因为没有它,我们就不能weak在协议中使用关键字.
protocol ExampleProtocol {}
class DelegatedClass {
weak var delegate: ExampleProtocol?
}
Run Code Online (Sandbox Code Playgroud)
这会生成错误:
'weak'不能应用于非类类型'ExampleProtocol'
那么为何不?因为weak关键字仅适用于ARC适用的引用类型.ARC不适用于值类型.如果没有指定我们的协议class,我们不能保证我们的delegate属性设置为引用类型.(如果我们不使用weak,我们很可能会创建一个保留周期.)
| 归档时间: |
|
| 查看次数: |
877 次 |
| 最近记录: |