我正在尝试写一个扩展名 Matrix
书中的例子, 略微调整为通用。
我正在尝试编写一个名为的方法 getRow
返回给定行的值序列。
在C#中,我会写这个:
IEnumerable<T> GetRow (int row)
{
return Enumerable
.Range (0, this.columns)
.Select ((column) => this.grid[row, columns]);
}
或者
IEnumerable<T> GetRow (int row)
{
for (var column = 0; column < this.columns; column++) {
yield return this.grid[row, column];
}
}
我不知道如何在Swift中做到这一点。
Sequence
似乎相当于 IEnumerable<T>
但我不明白它为什么使用 typealias
而不仅仅是被定义为 Sequence<T>
(也看到这个)。定义返回泛型的方法 Sequence<T>
不工作:
extension Matrix {
// Cannot specialize non-generic type 'Sequence'
func getRow<T>(index: Int) -> Sequence<T> {
return map(0..self.columns, { self[index, $0] })
}
}
然后我摆脱了 <T>
(但它应该如何通用?):
extension Matrix {
func getRow(index: Int) -> Sequence {
return map(0..self.columns, { self[index, $0] })
}
}
编译!但是我不能用它:
var row = grid.getRow(0)
// 'Sequence' does not conform to protocol '_Sequence_'
for i in row {
println("\(i)")
}
我该如何正确输入 map
结果所以它可以在一个消费 for..in
循环?
更多关于这个问题: 相关类型被认为是奇怪的