【问题标题】:can `public private(set) var numberOfEdits = 0` be written as `public(get) private(set) var numberOfEdits = 0`?`public private(set) var numberOfEdits = 0`可以写成`public(get) private(set) var numberOfEdits = 0`吗?
【发布时间】:2016-02-22 03:22:44
【问题描述】:

我是 Swift 的新手,它正在尝试学习访问控制的概念。我在“快速编程语言 2.1”中看到了这段代码。我理解代码"public private(set) var numberOfEdits = 0" 意味着对于变量 numberOfEdits,它有一个公共 getter 和一个私有 setter。

我的问题是,public private(set) var numberOfEdits = 0 可以写成public(get) private(set) var numberOfEdits = 0 以清楚地表明 numberOfEdits 有一个公共 getter 吗?

public struct TrackedString {
    public private(set) var numberOfEdits = 0
    public var value: String = "" {
        didSet {
            numberOfEdits++
        }
    }
    public init() {}
}

【问题讨论】:

    标签: swift get set getter access-control


    【解决方案1】:

    不,getter 始终具有非限定访问控制标签的访问级别。您可以使用private(set)internal(set) 覆盖setter 的级别,使其低于 getter 的级别。

    【讨论】:

    • “上面的每个访问级别修饰符都可选择接受一个参数,该参数由括号中的'set'关键字组成(例如,private(set))。”摘自:Apple Inc. “The Swift Programming Language (Swift 2.1 Prerelease)”。电子书。 itun.es/us/k5SW7.l
    • 部分:语言参考,小节:访问控制级别
    猜你喜欢
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2010-10-17
    • 2014-05-25
    • 1970-01-01
    • 2011-02-14
    • 2011-04-02
    • 2012-05-07
    相关资源
    最近更新 更多