斯威夫特:私人获取和公共场合

时间:2015-06-18 07:48:57

标签: swift

我到目前为止所发现的是一个公共获取和私人集合的场景,如下所示。

private(set) var distanceTravelled: Double

我想要反过来。当然以下是行不通的。

private(get) public var distanceTravelled: Double

4 个答案:

答案 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
  }
}