0

在另一个 SO 帖子中玩代码时,我发现了这种有趣的行为。

众所周知,a 的类型weak var需要是类类型,而泛型约束中使用的类型需要是类类型或协议类型。

因此,这不会编译:

class Foo<T> {
    weak var bar: T? // error
    func foo<U: T>(u: U) {} // error
}

根据这篇文章,我可以设置一个AnyObject约束(或任何具有: class约束的协议)T来消除第一个错误:

class Foo<T: AnyObject> {
    weak var bar: T?
    func foo<U: T>(u: U) {} // error
}

但是第二个错误仍然存​​在:

类型“U”受限于非协议、非类类型“T”

编译器似乎在这里撒谎。通过删除第一个错误,编译器刚刚承认它T确实是一个类类型,现在它说它不是。

为什么会这样?他们只是没有设计这个功能吗?

4

0 回答 0