Update:
深入研究这个问题后,发现我的答案是错误的。
您的代码应该可以正常编译,因为您没有子类化AugmentedRealityView
但一个嵌套类。
对我来说,实际问题看起来像是编译器错误。
您可以通过更改来解决该问题Swift Compiler
- Optimization Level
to Fast, Whole Module Optimization
代替None
:
原答案:
您正在尝试从一个类继承(AugmentedRealityView
)从定义类的模块外部,但它被标记public
and final
:
public final class AugmentedRealityView: UIView {
}
open class WorldObjectBasedAugmentedRealityObject: AugmentedRealityView {
}
final
一般禁止从此类继承。
public
允许从定义该类的模块内进行子类化(在 Swift3 中)。
要使类能够从定义它的模块外部进行子类化,请使用open
(Swift3 中的新功能):
open class AugmentedRealityView: UIView {
}
open class WorldObjectBasedAugmentedRealityObject: AugmentedRealityView {
}
要了解更多信息,请阅读this https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AccessControl.html#//apple_ref/doc/uid/TP40014097-CH41-ID3
您可以通过在类定义(final 类)中的 class 关键字之前写入 Final 修饰符,将整个类标记为 Final。任何对最终类进行子类化的尝试都会被报告为编译时错误。
...
开放访问仅适用于类和类成员,它与公共访问的区别如下:
具有公共访问权限或任何更严格的访问级别的类只能在定义它们的模块内进行子类化。
具有公共访问权限或任何更严格的访问级别的类成员只能在定义它们的模块内被子类覆盖。
开放类可以在定义它们的模块内以及导入定义它们的模块的任何模块内进行子类化。
开放类成员可以被定义它们的模块内以及导入定义它们的模块的任何模块内的子类覆盖。