在 iOS 框架中,如果我使用内部超类创建公共类,则会收到错误消息:
internal class Animal { }
public class Dog: Animal {
var name: String
public init(name: String) {
self.name = name
}
}
错误:类不能被声明为公共的,因为它的超类是内部的
这是有道理的。但是,如果我做同样的事情但在类声明中使用泛型,则不会显示错误。
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 链接器错误。
架构 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)
在包含该框架的应用程序中毫无问题地使用,但是当您尝试归档项目时,您会收到链接器错误。