首页 > 解决方案 > 为什么 reversed() 的结果确实表现得像一个数组?

问题描述

extension Array where Element == Int {
    func prefixSum() -> [Int] {
        var sum = 0
        return map { element in
            defer { sum += element }
            return sum
        }
    }
    
    func suffixSum() -> [Int] {
        reversed().prefixSum().reversed()
    }
}

上面的代码完美运行。
问题是它为什么有效?

该函数reversed()返回的不是数组。它返回ReversedCollection<Array>。所以结果不应该reversed()定义函数。并且返回类型也应该不匹配:函数期望返回一个数组。我认为应该这样写(当然也可以):prefixSum()suffixSum()suffixSum()

func suffixSum() -> [Int] {
    Array(Array(reversed()).prefixSum().reversed())
}

标签: swift

解决方案


推荐阅读