在iOS的框架,如果我创建一个内部超一个公共类,我得到一个错误:斯威夫特类泛型允许超都无法使用
internal class Animal { }
public class Dog: Animal {
var name: String
public init(name: String) {
self.name = name
}
}
Error: Class cannot be declared public because its superclass is internal
这是有道理的。但是,如果我在类声明中使用泛型,但不显示任何错误。
internal class Car<Type: Equatable> { }
public class Camry<Type: Equatable>: Car<Type> {
var name: String
public init(name: String) {
self.name = name
}
}
这只是一个错误?这两个例子是否应该给出一个错误?
如果将框架包含在项目中,则可以使用Camry
类,并且该应用程序将在模拟器和设备上构建并运行。但是,在某些情况下,我注意到如果您尝试使用这些内部泛型类来归档应用程序,您有时会得到Mach-O链接程序错误。
Undefined symbols for architecture arm64
我还没有能够明确为什么偶尔会发生这种情况。
编辑:当你在内部类中有一个公共初始值设定项时发生链接错误。因此,它允许包括一个框架,这样的代码:
internal class Car<Type: Equatable> {
var wheels: Type
public init(wheels: Type) {
self.wheels = wheels
}
}
public class Camry<Type: Equatable>: Car<Type> {
var name: String
public init(name: String, wheels: Type) {
self.name = name
super.init(wheels: wheels)
}
}
而且你可以在一个应用程序,包括该框架使用Camry<Int>(name: "My Camry", wheels: 4)
没有问题,但是当你尝试归档项目,你会得到一个链接器错误。
这可能是一个编译器错误。我会在bugs.swift.org上讨论它。 –
完成!我提交了它,它被接受为一个错误。 –