我正在做一个快速的项目,我有几个数组。在我的一个数组中,我不希望客户端能够在不使用我特别定义的方法之一的情况下对其进行变异。另一方面,我希望 getter 可以访问。我的问题是关于附加和设置属性。
问题1:是否会private(set)
阻止客户致电array.append
?
在另一个阵列上,我想看看它是否已更改。
问题 2:如果我使用 将属性观察器添加到数组中didSet
,那么didSet
在将元素附加到数组时会调用它吗?
问题 1: private(set) 是否会阻止客户端调用 array.append?
是的,它确实。
问题 2:如果我使用 将属性观察器添加到数组中didSet
,那么在将元素附加到数组时会调用它吗?
是的,当被didSet
调用时append()
被调用。
当您意识到 Swift 中的数组有效地按值传递时,您的问题的答案就很容易理解了。我说得很有道理,因为它们在通过时表现得好像被复制了一样,但是在引擎盖下有一些巧妙的魔法可以优化事物并避免实际上不必要地复制元素。
当didSet
属性值改变时调用处理程序,在 Swift 中包括数组。所以append()
Swift 中的数组实际上类似于对+=
整数的 a:首先读取数组,然后使用附加值创建一个新数组,然后将该新数组写回属性。didSet
因此,您可以看到,如果您调用append()
数组属性,它肯定会调用,同样,通过set
设为私有,外部用户将无法调用append()
,因为他们无法将新值写回数组。