带有泛型的Swift类允许无法访问超类

带有泛型的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

在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
    }
}

您可以在包含该框架的应用程序中使用
凯美瑞(名称:“我的凯美瑞”,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)
    }
}