将通用自由函数转换为数组扩展

问题描述 投票:-1回答:1

我写了一些代码来执行运行长度编码和解码。我有我的编码功能作为Array扩展的方法,但我不能以类似的方式进行解码。这可能吗?我找不到任何方法将新的泛型类型引入扩展。

func runLengthDecode<T: Equatable>(_ runLengthEncoding: [(element: T, count: Int)]) -> [T] {
    return runLengthEncoding.flatMap{ repeatElement($0.element, count: $0.count)}
}

我希望这个函数也是Array上的一个方法。有点像:

extension Array<T> where Element == (element: T, count: Int) {
    func runLengthDecode() -> [T] {
        return self.flatMap{ repeatElement($0.element, count: $0.count)}
    }
}
swift generics extension-methods
1个回答
1
投票

而不是约束数组扩展,而是将约束移动到您的方法:

extension Array {
    func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int)  {
        return flatMap{ repeatElement($0.element, count: $0.count) }
    }
}

或者干脆

extension Array {
    func runLengthDecode<T: Equatable>() -> [T] where Element == (element: T, count: Int)  {
        return flatMap(repeatElement)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.