我不能在扩展使用私有财产。我的扩展是在另一个文件。
我如何使用私人财产的延伸?
在你的类型的扩展使用属性的规则实际上并没有从使用特性其他地方的规则有什么不同。
如果属性声明private
,它不能在任何地方,除了与它已被宣布范围内使用。这意味着,即使不在同一个文件中。
如果属性声明fileprivate
,它只能被声明它的文件中(以及在该文件中的任何东西)使用。
如果属性声明internal
(默认值),它只能在模块内使用声明它(并在该文件中的任何东西)。
如果属性声明public
或open
,它可以通过导入它在声明的模块文件中使用的模块内的任何以及模块之外。
没有,因为它可以通过你的类型的扩展而不是由外类型其他的东西可以使用这样的方式来声明一个变量的方式。这实际上不是从斯威夫特2斯威夫特3.改变这一直是如此。你在找什么该怎么其他语言调用protected
。斯威夫特不和从未有过protected
的其他语言的等价物。
你可以得到的最接近的声明是在一个单一的文件类型及其所有扩展名,并禁止任何其他类型或类型扩展名在该文件中声明。然后,你可以标记属性fileprivate
,并通过该文件中的扩展使用。这仍然不会允许这种类型的文件之外的扩展使用该属性,它不会阻止未来的开发者从添加另一种类型或在使用这样的特性文件另一种类型的扩展名。