也许我太蠢了,我意识到应该知道这种事情,但是我被这个惊到了:
class Wrapper<T> {
let value: T
var wrapper: Wrapper? // ok
init(value: T) {
self.value = value
}
}
class Thing {
var wrapper: Wrapper? // error
}
错误在于在Thing类内部,当我声明类型时,必须解析包装器泛型;例如,我需要这样说:
var wrapper: Wrapper<String>?
为什么在Wrapper内部声明属性的类型为Wrapper是合法的,但在其他地方却不行?是什么原因让Wrapper内部的声明合法?这是因为编译器假定在Wrapper内部,
Wrapper
意味着Wrapper<T>
吗?
extension
的一部分,但这似乎有所不同。 - mattSelf
和associatedType
约束,以及对some
的使用。 - Chip Jarred