分段故障:11 - 交叉引用模块

Dam*_*ycz 5 xcode segmentation-fault ios swift swift3

我正在尝试使用对模块的交叉引用来解决分段错误.不知道如何使这项工作.部分错误如下:

1.  While reading from /Users/damiandudycz/Library/Developer/Xcode/DerivedData/Hypno-azmcjycezcoqnfauqcbgimvipjyj/Build/Intermediates/Hypno.build/Debug-iphonesimulator/Hypno.build/Objects-normal/x86_64/WorldObjectBasedAugmentedRealityObject~partial.swiftmodule
2.  While deserializing 'WorldObjectBasedAugmentedRealityObject' (ClassDecl #12) 
3.  While deserializing decl #31 (XREF)
4.  Cross-reference to module 'AugmentedReality'
... AugmentedRealityView
... in an extension in module 'AugmentedReality'
... Object
5.  While loading members for 'AugmentedRealityView' at <invalid loc>
6.  While deserializing 'init' (ConstructorDecl #5) 
7.  While deserializing decl #33 (XREF)
8.  Cross-reference to module 'UIKit'
... UIView
... init
... with type (UIView.Type) -> (CGRect) -> UIView
Run Code Online (Sandbox Code Playgroud)

当我从其他模块继承一个类的子类时,会出现问题.而其他模块中的这个类继承自UIView.我准备了一个"空"项目版本 - 我删除了大部分文件和定义,只剩下空类和模块.有人可以帮我吗?问题显示在类GoogleARObject中 - 当此类被删除或注释时,它会编译.

具有空类的项目:https: //dl.dropboxusercontent.com/u/40968624/Hypno.zip

sha*_*ght 12

更新:

在对问题进行深入研究后发现我的答案是错误的.

您的代码应该编译正常,因为您不是子类AugmentedRealityView而是嵌套类.

对我来说,实际问题看起来像编译器错误.

您可以通过改变解决问题Swift Compiler- Optimization LevelFast, Whole Module Optimization代替None:


原答案:

您正在尝试从一个类(继承AugmentedRealityView)自定义类的模块之外,但它被标记publicfinal:

public final class AugmentedRealityView: UIView {
}

open class WorldObjectBasedAugmentedRealityObject: AugmentedRealityView {
}
Run Code Online (Sandbox Code Playgroud)

final 一般来说,禁止从这个类继承.

public 允许从模块中继承子类(在Swift3中).

要在类中定义一个类子类,使用open(Swift3中的new):

open class AugmentedRealityView: UIView {
}

open class WorldObjectBasedAugmentedRealityObject: AugmentedRealityView {
}
Run Code Online (Sandbox Code Playgroud)

要了解更多信息,请阅读本文

您可以通过在类定义(最终类)中的class关键字之前编写final修饰符来将整个类标记为final.任何将最终类子类化的尝试都会报告为编译时错误.

...

开放访问仅适用于类和类成员,它与公共访问不同,如下所示:

具有公共访问权限或任何更严格的访问级别的类只能在定义它们的模块中进行子类化.

具有公共访问权限或任何更具限制性的访问级别的类成员只能在定义它们的模块中被子类覆盖.

开放类可以在定义它们的模块中进行子类化,也可以在导入模块的任何模块中进行子类化.

开放类成员可以由定义它们的模块中的子类覆盖,也可以在导入定义它们的模块的任何模块中覆盖.