slightly tweaked to be generic adresinden Matrix
örneği için bir uzantı yazmaya çalışıyorum.
Verilen satırda bir değer dizisi döndüren getRow
adlı bir yöntem yazmaya çalışıyorum. C#Swift'de bir diziyi nasıl döndürebilirim?
, ben bu yazılı olurdu:
IEnumerable<T> GetRow (int row)
{
return Enumerable
.Range (0, this.columns)
.Select ((column) => this.grid[row, columns]);
}
veya alternatif
IEnumerable<T> GetRow (int row)
{
for (var column = 0; column < this.columns; column++) {
yield return this.grid[row, column];
}
}
olsa Swift de bunun nasıl emin değilim.
Sequence
IEnumerable<T>
eşdeğer gibi görünüyor ama
typealias
kullandığı yerine sadece
Sequence<T>
(
see also this) olarak tanımlanır ancak neden anlamıyorum.
Sonra (ancak genel olması gerekiyordu nasıl?)
<T>
kurtuldum
extension Matrix {
// Cannot specialize non-generic type 'Sequence'
func getRow<T>(index: Int) -> Sequence<T> {
return map(0..self.columns, { self[index, $0] })
}
}
: Bu derler
extension Matrix {
func getRow(index: Int) -> Sequence {
return map(0..self.columns, { self[index, $0] })
}
}
işe yaramadı jenerik Sequence<T>
döndüren bir yöntem tanımlama! Ancak bunu kullanamazsınız: Bir for..in
döngü içinde tüketilebilir böylece
var row = grid.getRow(0)
// 'Sequence' does not conform to protocol '_Sequence_'
for i in row {
println("\(i)")
}
nasıl düzgün bir map
sonucu yazabilirim? Bu konudaki
Daha: Associated Type Considered Weird
Tüm bu bağlantılar için teşekkürler - çok takdir. – ColinE
SequenceOf'un Swift'in son sürümlerinden kaldırıldığını unutmayın. –