协议中的自我总是需要是可选的?
Self in protocol always need to be optional?
示例:
internal protocol PropertyProtocol {
var property: Self {
get
}
}
我认为实现它的唯一选择,让我们在 class 中说是
internal final class PropertyClass: PropertyProtocol {
let property: PropertyClass
internal init(otherOne pOtherOne: PropertyClass) {
self.property = pOtherOne
}
}
但后来我看不到使用它的可能性。
let test: PropertyProtocol = PropertyProtocol(...) // hmm, how?
协议中的 Self 属性 类型声明是否始终必须是可选的?
作为存储的 属性,实际上创建实例必须是可选的,因为每个实例都需要在初始化期间分配存储的 属性 – 导致递归行为.因此 Self
作为存储的 属性 没有太大意义;它实际上更适合与方法或计算属性一起使用。
根据您使用它的目的(似乎是一个相当假设的示例),您可以像这样实现计算的 属性:
protocol PropertyProtocol {
var property : Self { get }
}
final class PropertyClass : PropertyProtocol {
var property : PropertyClass {
get {
return // ...
}
set {
// ...
}
}
}
这样 class 本身就可以在访问时管理 属性 的创建,从而防止在初始化期间要求分配它的递归行为。
示例:
internal protocol PropertyProtocol {
var property: Self {
get
}
}
我认为实现它的唯一选择,让我们在 class 中说是
internal final class PropertyClass: PropertyProtocol {
let property: PropertyClass
internal init(otherOne pOtherOne: PropertyClass) {
self.property = pOtherOne
}
}
但后来我看不到使用它的可能性。
let test: PropertyProtocol = PropertyProtocol(...) // hmm, how?
协议中的 Self 属性 类型声明是否始终必须是可选的?
作为存储的 属性,实际上创建实例必须是可选的,因为每个实例都需要在初始化期间分配存储的 属性 – 导致递归行为.因此 Self
作为存储的 属性 没有太大意义;它实际上更适合与方法或计算属性一起使用。
根据您使用它的目的(似乎是一个相当假设的示例),您可以像这样实现计算的 属性:
protocol PropertyProtocol {
var property : Self { get }
}
final class PropertyClass : PropertyProtocol {
var property : PropertyClass {
get {
return // ...
}
set {
// ...
}
}
}
这样 class 本身就可以在访问时管理 属性 的创建,从而防止在初始化期间要求分配它的递归行为。