我的对象符合SequenceType,因此它实现了generate函数。 我的对象有一个可选对象,它有一个值数组 如果我有一个数组,我通过生成器返回值,但如果没有值,则生成器必须返回nil。我有下面的代码可以工作,但它相当冗长。有没有更好的方法来处理这个?
func generate() -> GeneratorOf<ValueType> {
if let values = self.data.values
{
var index : Int = 0
return GeneratorOf<ValueType> {
return (index < values.count) ? values[index++] : nil
}
}
//how to improve these lines (or wrap it into the code above?) This feels like repetition.
return GeneratorOf<ValueType> {
return nil
}
}
答案 0 :(得分:1)
从可选values
创建可选的生成器。然后使用可选链接来调用next
:
func generate() -> GeneratorOf<ValueType> {
var g = data.values?.generate()
return GeneratorOf<ValueType> {
return g?.next()
}
}
如果生成器为nil
,则只会在第一次调用时返回nil
,否则它将返回values
中的所有值。