The problem is that the compiler does not know that your extension is for 2D arrays - it just knows that it is for collection arrays. Therefore, the associated types IndexDistanceand Indexnot necessarily Int.
, , , Element IndexDistance Index Int. 0..<count, count Int (IndexDistance) - map(_:) Int ( Index).
( , Element Array, .)
, Element.Iterator.Element: Collection , (, , ).
, typealias " " 2D-, Swift , , 2D- .
:
extension Array where Element: Collection, Element.Index == Int, Element.IndexDistance == Int {
private func rotate() -> [[Element.Iterator.Element]] {
typealias InnerElement = Element.Iterator.Element
if self.isEmpty { return [] }
let length = self[0].count
var returnValue = [[InnerElement]](repeating: [InnerElement](), count: length)
for index in 0..<length {
returnValue[index] = self.map{ $0[index] }.reversed()
}
return returnValue
}
}
, @MartinR , , map(_:), typealias, "result":
private func rotate() -> [[Element.Iterator.Element]] {
if self.isEmpty { return [] }
let length = self[0].count
return (0..<length).map { index in
self.map { $0[index] }.reversed()
}
}
, Int ( , 2D-). indices.
, , indices Element , Index ( Array, indices CountableRange<Int>):
extension Array where Element: Collection, Element.Indices.Iterator.Element == Element.Index {
private func rotate() -> [[Element.Iterator.Element]] {
if self.isEmpty { return [] }
return self[0].indices.map { index in
self.map { $0[index] }.reversed()
}
}
}