解决方法
在您的类型的扩展中使用属性的规则实际上与在其他任何地方使用该属性的规则没有任何不同.
如果属性被声明为private,则除了在声明范围之外的任何地方都不能使用它.这意味着即使在同一个文件中也是如此.
如果属性声明为fileprivate,则只能在声明它的文件中(以及该文件中的任何内容)使用它.
如果属性声明为internal(默认值),则只能在声明它的模块中(以及该文件中的任何内容)使用它.
如果属性声明为public或open,则模块中的任何内容以及模块外部的任何内容都可以使用它来导入声明它的模块.
没有办法以这样的方式声明变量,即它可以被类型的扩展使用,但不能被类型之外的其他东西使用.这实际上并不是从Swift 2到Swift 3的变化.情况一直如此.你正在寻找什么其他语言称为受保护. Swift没有,也从未有过与其他语言相同的保护.
最接近的是在一个文件中声明一个类型及其所有扩展,并禁止在该文件中声明任何其他类型或类型扩展.然后,您可以将属性标记为fileprivate,并通过该文件中的扩展名使用它们.这仍然不允许在文件之外通过该类型的扩展来使用该属性,并且它不会阻止将来的开发人员在使用该属性的该文件中添加另一种类型或另一种类型的扩展.