从Xcode 8 beta 6开始,我现在在其定义模块之外收到编译错误“无法从非开放类(类)继承”我所继承的类是一个单独的Swift框架的一部分,但我的项目是为Xcode 8 beta 5编译的。我需要做什么更改才能使我的项目再次编译?
wn9m85ua1#
自己找到了答案。在Swift 3中,你现在可以将一个类标记为open而不是public,这允许模块外的文件子类化该类。只需将模块类中的public替换为open即可。参考here。
open
public
jbose2ul2#
您继承的类别必须定义为open,而非public。更多关于Swift 3中访问控制更改的内容:Swift 2只有3个访问级别:
private
internal
Swift 3增加了2个访问级别(open和fileprivate),并更改了private的含义:
fileprivate
t30tvxxf3#
即使在将类标记为open(在Xcode 14.1上)之后,我也遇到了这个错误。修复是一个干净的(Cmd + Shift + K)和重建。
3条答案
按热度按时间wn9m85ua1#
自己找到了答案。
在Swift 3中,你现在可以将一个类标记为
open
而不是public
,这允许模块外的文件子类化该类。只需将模块类中的
public
替换为open
即可。参考here。
jbose2ul2#
您继承的类别必须定义为
open
,而非public
。更多关于Swift 3中访问控制更改的内容:
Swift 2只有3个访问级别:
private
:实体只能从定义它们的来源档案中使用。internal
:实体可用于包含定义的整个模块。public
:实体是作为API使用的,可以由任何导入模块的文件访问。Swift 3增加了2个访问级别(
open
和fileprivate
),并更改了private
的含义:private
:符号仅在当前声明中可见。fileprivate
:当前文件中可见的符号。internal
:在当前模块或默认访问修饰符中可见的符号。public
:在当前模块外部可见的符号。open
:用于要在当前模块外子类化或重写的类或函数。t30tvxxf3#
即使在将类标记为
open
(在Xcode 14.1上)之后,我也遇到了这个错误。修复是一个干净的(Cmd + Shift + K)和重建。