gpt4 book ai didi

swift - 如何编写存储相同类型的生成器的通用 Swift 类

转载 作者:搜寻专家 更新时间:2023-11-01 07:34:14 25 4
gpt4 key购买 nike

我正在尝试编写一个处理同类对象的类,并且我想使用相同类型的(否则是任意的)生成器来提供这些对象。

本质上是这样的:

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' can only be used as a generic constraint because it has Self or associated type requirements.

尝试了一些事情(例如 GeneratorType<T> ),但我不知道如何正确地做到这一点。如何告诉 GeneratorType T 是它的元素类型别名?

最佳答案

你必须使用生成器类型作为类型占位符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)

可选地,为元素类型定义一个类型别名:

class MyGenericClass<G : GeneratorType> {

typealias T = G.Element

var source : G
var itemsProcessed : [ T ] = []

// ...
}

关于swift - 如何编写存储相同类型的生成器的通用 Swift 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30982102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com