在另一个 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
确实是一个类类型,现在它说它不是。
为什么会这样?他们只是没有设计这个功能吗?