Я хотел бы назначить typealias для 2D универсального массива. ( Я не хочу создавать новый тип struct MatrixT<T>{}
). Поэтому я делаю следующее:
typealias MatrixT<T> = [[T]]
Но когда я начал писать расширение для него, я обнаружил, что компилятор на самом деле не понимает, что MatrixT
это 2D массив. Он распознает тип self
как [Element]
extension MatrixT {
var columnsCount: Int {
let copy = self \\compilator recognizes this as let copy: [Element] = self
let row = self[0] \\compilator recognizes this as let row: Element
return 0
}
}
Но вне расширения компилятор Swift понимает, что элемент MatrixT
является массивом.
func testCreation() {
let matrix: MatrixT = [[0]]
let firstRow:[Int] = matrix[0] \\ correct
let columnsCount = firstRow.count
}
Почему я могуНе относится ли тип MatrixT
в расширении к массиву 2D ([[T]]
)?