所以我在这里浏览一下苹果文档-Apple Docs
然后我遇到了这样的情况:
public struct TrackedString {
public private(set) var numberOfEdits = 0
public var value: String = "" {
didSet {
numberOfEdits += 1
}
}
public init() {}
}
添加public private(set)
到底是如何工作的?如果你能展示一些更简单的例子/解释,那就太棒了!
3条答案
按热度按时间laawzig21#
这仅仅意味着
numberOfEdits
的getter是公共的,而setter是私有的。没有比这更重要的了。这种情况下的原因是,您可以公开读取
numberOfEdits
,但只能通过更改value
进行设置。如果它完全是public
,那么任何人都可以设置它,但如果它只是可设置的,那么value
中的didSet
不能修改它。private(set)
是两者之间的折衷方案。iih3973s2#
该属性可以读取,但不能从外部设置。
您可以通过写入
private(set)
来分配较低的访问级别。它的工作方式类似于Public getter和Private setter。
尝试访问
private
变量时会出现错误。但是,通过将
private
访问级别更改为private(set)
,我们可以在一行中修复此错误。因此,您可以轻松访问私有变量、常量、属性或下标。
使用
fileprivate(set)
、private(set)
和internal(set)
可以更改此合成设置器的访问级别,方法与更改计算属性中显式设置器的方式完全相同。编号:Click the link to know more
0lvr5msh3#
private (set) var
的目的是限制对内部作用域的写入访问,但仍允许外部读取访问。变量在内部是可读和可写的。
private (set) var
将写访问限制为仅内部访问,而允许外部读访问。例如:
无法从外部访问
private var
private (set) var
允许外部读取访问,但仅限于内部写入访问