【发布时间】:2017-10-16 15:16:34
【问题描述】:
我需要使用符合类中的协议属性作为私有。但编译器拒绝这样做。我该如何实现?
protocol ProtocolX: class {
var x: Int { get set }
func performAnyActionOnX()
}
extension ProtocolX {
func performAnyActionOnX() {
x = 5
print(x)
}
}
class A: ProtocolX {
private var x:Int = 7
}
谢谢。
【问题讨论】:
-
协议可以被认为是另一种类型必须实现的契约。协议的有用性来自于其他类知道采用该协议的类遵循什么规则这一事实。将变量设置为
private会破坏此目的。如果您真的需要将变量设为私有,您需要重新考虑。 -
我认为确保符合条件的类具有特定属性非常合乎逻辑,但我不希望该属性出现在其类之外。
-
@SamehDos,在这种情况下,您需要添加另一层抽象,一些定义实现细节而不用作接口的协议。你可以使用类似python的__privacy。
标签: swift architecture protocols private