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

Sve*_*rer 22 swift

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

private(set) var distanceTravelled: Double
Run Code Online (Sandbox Code Playgroud)

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

private(get) public var distanceTravelled: Double
Run Code Online (Sandbox Code Playgroud)

gio*_*shc 15

如果你想要一个公共setter但是这个var的私有getter你可以将它声明为private:

private var distanceTravelled: Double
Run Code Online (Sandbox Code Playgroud)

并创建一个公共方法来设置此变量:

public func setDistanceTravelled(distanceTravelled: Double) {
    self.distanceTravelled = distanceTravelled
}
Run Code Online (Sandbox Code Playgroud)

  • 好的,这很清楚。但是希望会有一个简短的形式。 (5认同)

Dam*_*ver 11

我不相信这是可能的.引用文档:

您可以为setter提供比其相应getter 更低的访问级别

也就是说,您只能在一个方向上改变访问权限,这就是使setter比getter更具限制性.


Cla*_*ges 8

是可能的,从 Xcode 10.2 / Swift 5 开始。

您将计算属性与@available属性组合在一起,如下所示:

public var distanceTravelled: Double {
  @available(*, unavailable) 
  get { internalDistanceTravelled }

  set { internalDistanceTravelled = newValue }
}

private var internalDistanceTravelled: Double

Run Code Online (Sandbox Code Playgroud)

请注意,如果您使distanceTravelledObjective-C 可见,unavailable则不会扩展到那里。