带有泛型的Swift类允许无法访问超类
在iOS框架中,如果我创建了一个带有内部超类的公共类,我会得到一个错误:带有泛型的Swift类允许无法访问超类,swift,generics,inheritance,access-levels,Swift,Generics,Inheritance,Access Levels,在iOS框架中,如果我创建了一个带有内部超类的公共类,我会得到一个错误: internal class Animal { } public class Dog: Animal { var name: String public init(name: String) { self.name = name } } 错误:类不能声明为公共类,因为它的超类是内部的 这是有道理的。但是,如果我做同样的事情,但在类声明中使用泛型,则不会显示错误 internal
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
}
}
您可以在包含该框架的应用程序中使用
凯美瑞(名称:“我的凯美瑞”,wheels:4)
,但当您尝试归档该项目时,您会遇到链接器错误。正如Rob Napier所建议的,这确实是一个bug。它在bugs.swift.org上被接受为问题SR-6206,应该在swift 4.1中修复。这可能是一个编译器错误。我会在bugs.swift.org.Done上讨论它!我提交了它,它作为一个bug被接受。
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)
}
}