【问题标题】:Is it possible to assign typealias for 2D dimension array in Swift? typealias MatrixT<T> = [[T]]是否可以在 Swift 中为二维数组分配类型别名?类型别名 MatrixT<T> = [[T]]
【发布时间】:2019-10-19 18:34:57
【问题描述】:

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

typealias MatrixT<T> = [[T]]

但是当我开始为其编写扩展时,我发现编译器实际上并不理解 MatrixT2D 数组。它将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
}

为什么我不能在 2D 数组 ([[T]]) 的扩展中引用类型 MatrixT

【问题讨论】:

    标签: arrays extension-methods type-alias swift5.1


    【解决方案1】:

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

    public struct Array<Element> 
    

    那个 Element 恰好是一个数组。扩展你的,用于以下定义

    typealias MatrixZ<Z> = [[[Z]]]
    
    extension MatrixZ {
    
        var someCount: Int {
            let copy = self
            let row = self[0]
            return 0
        }
    }
    
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多