【发布时间】:2018-12-05 18:42:44
【问题描述】:
我试图弄清楚如何在一个类中隐式设置一个 Generic(参数的类型)而不将整个类的类型更改为 SomeTestClass
示例
这个例子不起作用!这就是我希望它的工作方式
protocol SomeTestProtocol {
associatedtype T
init(arg: T)
}
不想使用 SomeTestClass 因为拥有这个班级的班级 不知道所使用的泛型类型
class SomeTestClass: SomeTestProtocol {
required init(arg: T) {
}
// Use T outside the init-scope
}
注意:协议只是一种变通方法的尝试!最终解决方案没有必要
所以主要问题是:如何在不使用类泛型的情况下在下面的类的初始化范围之外使用 T,而拥有一个对象时必须知道这一点
class SomeTestClass2/*< T>*/ {
init(arg: T) {
}
// Use T outside the init-scope
}
感谢您的帮助!
【问题讨论】:
-
“如何在不使用类泛型的情况下在下面的类的初始化范围之外使用 T,而拥有一个对象时必须知道这一点” 不清楚这些词的含义。泛型的占位符类型必须始终在编译时解析。 当然类型是已知的。这就是泛型。它不是白板。它只是一个占位符表达式,用于简写表示两种类型是同一类型。
-
在这里继续 matt 的观点:泛型和 PAT(带有关联类型的协议)都包含类型参数。它们之间的区别在于,在泛型中,实例的创建者决定类型值,而在 PAT 中,实现的创建者决定类型值。有人必须决定类型值。您要决定的人是您如何决定是使用泛型还是协议。 (在 Swift 中 90% 的情况下,答案都是通用的。)
标签: swift generics swift-protocols associated-types