我正在尝试编写一个处理同类型对象的类,并且我想使用相同类型的(否则是任意的)生成器来提供这些对象。
本质上:
class MyGenericClass<T> {
var source : GeneratorType
var itemsProcessed = [ T ]()
init(source: GeneratorType) {
self.source = source
}
func getValue() -> T? {
let item = source.next()
if let item = item {
itemsProcessed.append(item)
}
return item
}
}
您可以这样称呼:
let myThing = MyGenericClass([ 1, 2, 3].generate())
let first = myThing.getValue()
这引发:'GeneratorType'只能用作通用约束,因为它具有Self或相关的类型要求。
尝试了一些事情(例如GeneratorType<T>
),但我无法弄清楚如何做到这一点。
如何告诉GeneratorType T是它的Element类型别名?
答案 0 :(得分:2)
您必须使用生成器类型作为类型占位符sails.js
,
并将其元素类型称为G
:
G.Element
(可选)为元素类型定义类型别名:
class MyGenericClass<G : GeneratorType> {
var source : G
var itemsProcessed : [ G.Element ] = []
init(source: G) {
self.source = source
}
func getValue() -> G.Element? {
let item = source.next()
if let item = item {
itemsProcessed.append(item)
}
return item
}
}
let myThing = MyGenericClass(source: [ 1, 2, 3].generate())
let first = myThing.getValue()
println(first) // Optional(1)