不能在其他文件的扩展名中使用私有属性

我不能在扩展中使用私有财产。 我的扩展名在另一个文件中。

我如何在扩展中使用私有财产?

编辑:因为它不是从swift2更改为swift3

在types的扩展中使用属性的规则实际上与其他地方使用该属性的规则没有任何区别。

如果该财产被宣布为private财产,除了在其宣布的范围内,它不能在任何地方使用。 这意味着即使在同一个文件中。

如果该属性声明为fileprivate ,则只能在声明的文件内使用(以及该文件中的任何内容 )。

如果属性声明为internal (默认),则只能在声明的模块内使用(以及该文件中的任何内容 )。

如果属性被声明为publicopen ,那么它可以被模块内部以及模块外的任何东西通过导入声明模块的文件来使用。

没有办法以这样一种方式来声明一个variables,它可以被你的types的扩展使用,但不能被types之外的其他东西使用。 这实际上并不是从Swift 2到Swift 3的变化。情况一直如此。 你在找什么其他语言叫什么protected 。 斯威夫特并没有,也从来没有相当于从其他语言protected

您可以得到最接近的是在单个文件中声明types及其所有扩展名,并禁止在该文件中声明任何其他types或types的扩展名。 然后,您可以将属性标记为fileprivate ,并通过该文件中的扩展名使用它们。 这仍然不允许通过该types的扩展在文件之外使用该属性,并且不会阻止将来的开发者在使用该属性的该文件中添加另一types或另一types的扩展。