我到目前为止所发现的是一个公共获取和私人集合的场景,如下所示。
private(set) var distanceTravelled: Double
我想要反过来。当然以下是行不通的。
private(get) public var distanceTravelled: Double
答案 0 :(得分:11)
如果你想要一个公共的setter,但是你需要这个var的私有getter,你可以将它声明为私有:
private var distanceTravelled: Double
并创建一个用于设置此变量的公共方法:
public func setDistanceTravelled(distanceTravelled: Double) {
self.distanceTravelled = distanceTravelled
}
答案 1 :(得分:10)
我不相信这是可能的。引用documentation:
您可以为setter提供 lower 访问级别,而不是相应的getter
也就是说,你只能改变一个方向的访问权限,那就是让setter比getter更具限制性。
答案 2 :(得分:0)
从Xcode 10.2 / Swift 5开始,这可以通过将计算属性与@available
属性组合来实现。
private var internalDistanceTravelled: Double
public var distanceTravelled: Double {
@available(*, unavailable) get { return internalDistanceTravelled }
set(distanceTravelled) { self.internalDistanceTravelled = distanceTravelled }
}
请注意,如果使distanceTravelled
对Objective-C可见,则unavailable
不会在其中扩展。
答案 3 :(得分:-2)
你可以这样做:
private var _distanceTravelled: Double
var distanceTravelled: Double {
get {
fatalError("Access denied.")
}
set {
_distanceTravelled = newValue
}
}