Swift中protocol to inherit from class关键字是什么意思?
In Swift, what does it mean for protocol to inherit from class keyword?
在Swift中,协议继承自class关键字是什么意思?
例如
protocol MyDelegate: class {
}
You can limit protocol adoption to class types (and not structures or
enumerations) by adding the class keyword to a protocol’s inheritance
list.
示例:
protocol AProtocol: class {
}
//Following line will produce error: Non-class type 'aStruct' cannot conform to class protocol 'AProtocol'
struct aStruct: AProtocol {
}
声明结构的那一行会吐出一个错误。以下行将产生错误:
Non-class type 'aStruct
' cannot conform to class protocol 'AProtocol
'
的要点是正确的,但它遗漏了 为什么 我认为这里很重要。归结为 ARC 和内存管理。
Swift是引用类型和值类型的语言。 类 是引用类型,而其他一切都是值类型。实际上,我们并没有真正指定协议 从 class
继承 ...更像是我们指定协议只能由 [=34= 实现]引用类型.
为什么这很重要?
这很重要,因为没有它,我们就不能在协议中使用 weak
关键字。
protocol ExampleProtocol {}
class DelegatedClass {
weak var delegate: ExampleProtocol?
}
这会产生错误:
'weak' cannot be applied to non-class type 'ExampleProtocol'
为什么不呢?因为 weak
关键字只对应用 ARC 的引用类型有意义。 ARC 不适用于值类型。如果不使用 class
指定我们的协议,我们不能保证我们的 delegate
属性 设置为引用类型。 (如果我们不使用 weak
,我们很可能会创建一个保留循环。)
在Swift中,协议继承自class关键字是什么意思?
例如
protocol MyDelegate: class {
}
You can limit protocol adoption to class types (and not structures or enumerations) by adding the class keyword to a protocol’s inheritance list.
示例:
protocol AProtocol: class {
}
//Following line will produce error: Non-class type 'aStruct' cannot conform to class protocol 'AProtocol'
struct aStruct: AProtocol {
}
声明结构的那一行会吐出一个错误。以下行将产生错误:
Non-class type '
aStruct
' cannot conform to class protocol 'AProtocol
'
Swift是引用类型和值类型的语言。 类 是引用类型,而其他一切都是值类型。实际上,我们并没有真正指定协议 从 class
继承 ...更像是我们指定协议只能由 [=34= 实现]引用类型.
为什么这很重要?
这很重要,因为没有它,我们就不能在协议中使用 weak
关键字。
protocol ExampleProtocol {}
class DelegatedClass {
weak var delegate: ExampleProtocol?
}
这会产生错误:
'weak' cannot be applied to non-class type 'ExampleProtocol'
为什么不呢?因为 weak
关键字只对应用 ARC 的引用类型有意义。 ARC 不适用于值类型。如果不使用 class
指定我们的协议,我们不能保证我们的 delegate
属性 设置为引用类型。 (如果我们不使用 weak
,我们很可能会创建一个保留循环。)