【发布时间】:2021-03-24 18:43:22
【问题描述】:
也许我太密集了,我意识到我应该知道这种事情,但我对此感到惊讶:
class Wrapper<T> {
let value: T
var wrapper: Wrapper? // ok
init(value: T) {
self.value = value
}
}
class Thing {
var wrapper: Wrapper? // error
}
错误是在类 Thing 中,我必须在声明类型时解析 Wrapper 泛型;例如,我需要说,
var wrapper: Wrapper<String>?
为什么声明一个属性在 Wrapper 内部具有简单且简单的 Wrapper 类型是合法的,而在其他地方则不然?是什么让 Wrapper 中的声明没问题?是不是因为编译器只是假设在 Wrapper 内部,Wrapper 意味着 Wrapper<T>?
【问题讨论】:
-
@Jessy 我想我知道
extension位,但这似乎有所不同。 -
在大多数情况下,它已经过时了。 forums.swift.org/t/…
-
经过多次编辑,我想我已经将我的答案提炼成可以理解但不会太长的东西。抱歉,如果您在我重新编辑了很多次时尝试阅读它。我应该离线写的。
-
@ChipJarred Nah,我做同样的事情:回答然后疯狂地编辑。基本上你是说我的猜测是正确的;它推断T是同一个T。有趣的是我以前从未注意到这个快捷方式。