扩展数组的数组 - Swift 4.1

Extending Arrays of Arrays - Swift 4.1

扩展数组的数组

Swift4.1,Xcode9.3

如何在 Swift 中扩展 Array<Array>

extension Array where Element == Array { //This is where the error occurs
    someMethod()
}

此外,我将如何扩展特定类型的数组,例如:

extension Array where Element == Array<Int> { //Can I even do this?
    someOtherMethod()
}

在此先感谢您的帮助!

我用过

extension Array where Element: RandomAccessCollection, Element.Index == Int {
}

例如通过 IndexPath

添加自定义下标

您可以通过任一方式扩展

extension Array where Element == Int {

    func someIntegers() {

    }
}

extension Array where Element == Array<String> {

    func someStrings() {

    }
}

然后在任何地方都这样调用,

[0, 1, 2].someIntegers()

[["hi"]].someStrings()

对于想要比目前的答案更普遍地执行此操作的人来说,这是一个开始。

扩展 Array<Array>:

protocol ExpressibleAsDouble { // for illustration
    func asDouble() -> Double
}

extension Array where Element: Sequence, Element.Element: ExpressibleAsDouble {
    func asDoubles() -> [[Double]] {
        return self.map { row in
            row.map { scalar in
                scalar.asDouble()
            }
        }
    }
}

//-------------------------------------------
//example usage
extension Int: ExpressibleAsDouble {
    func asDouble() -> Double {
        return Double(self)
    }
}

let ints: [[Int]] = [[1, 2], [3, 4]]
print(ints.asDoubles())
// prints: [[1.0, 2.0], [3.0, 4.0]]

这实际上是对 Array<any sequence, Array being one possible option> 的扩展,如果您想一般地引用嵌套标量,我不确定是否可以将其限制为 Array<Array>

Element 指的是 Array 的第一个维度(这是另一个数组),Element.Element 指的是嵌套维度的类型(如果我们重新谈论二维数组)。