如何编写集合类型的扩展

时间:2014-06-03 06:55:40

标签: swift

extension Array {
    func sum() -> Int {
        var sum = 0
        for num in self {
            sum += num
        }
        return sum
    }
}

[1,2,3].sum()

此代码显示了我想要做的事情。虽然我在这一行上收到错误:sum += num。我得到的错误是:Could not find an overload for '+=' that accepts the supplied arguments

我认为错误与Array可以包含许多不同类型的事实有关,而不仅仅是Int,所以它的问题就在于此。但是如何解决?

2 个答案:

答案 0 :(得分:4)

目前还没有一种方法可以只扩展特定类型的Array(在这种情况下为Array<Int>)。这是一个很好的请求,以提交bugreport.apple.com

与此同时,你可以这样做(不在扩展名中):

func sum(ints:Int[]) -> Int {
    return ints.reduce(0, +)
}

答案 1 :(得分:3)

所需要的只是明确转换为Int

extension Array {
    func Sum() -> Int {
        var sum = 0

        for num in self {
            sum += (num as Int)
        }

        return sum
    }
}

println([1,2,3].Sum()) //6