0

我想为二维泛型数组分配类型别名。(我不想创建新类型struct MatrixT<T>{})。所以我接下来做:

typealias MatrixT<T> = [[T]]

但是当我开始为其编写扩展时,我发现编译器实际上并不理解这MatrixT二维数组。它识别类型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]])?

4

1 回答 1

0

typealias 是现有类型的别名。这里它指的是一些东西的数组。如果你看一个数组的定义,它是

public struct Array<Element> 

该元素恰好是一个数组。扩展你的,用于以下定义

typealias MatrixZ<Z> = [[[Z]]]

extension MatrixZ {

    var someCount: Int {
        let copy = self
        let row = self[0]
        return 0
    }
}

这里也恰好是二维数组的元素。

于 2019-10-31T23:58:07.160 回答