swift sequenceType返回nil

时间:2015-01-02 12:37:13

标签: swift sequence

我的对象符合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
    }
}

1 个答案:

答案 0 :(得分:1)

从可选values创建可选的生成器。然后使用可选链接来调用next

func generate() -> GeneratorOf<ValueType> {
    var g = data.values?.generate()
    return GeneratorOf<ValueType> {
        return g?.next()
    }
}

如果生成器为nil,则只会在第一次调用时返回nil,否则它将返回values中的所有值。