我可以传入Set <int>或[Int]的函数参数

时间:2016-07-27 23:40:15

标签: ios swift protocols

基本上我希望能够传递Set<Int>[Int]或任何事情至少,我可以遍历一组无序的Int

我宁愿不必将[Int]转换为Set<Int>(反之亦然)。我希望避免使用需要不同内容([Int]Set<Int>)但执行相同操作的函数,这就是我现在正在做的事情。

我在很多地方使用此功能,而来电者有时关心订单([Int]),有时不关心(Set<Int>)。但该功能不需要任何特定的顺序。

这样的事情:

extension SequenceType where Generator.Element: Int { }

但作为参数。

功能示例(根据要求):

上面解释的Int只是为了简化,我的例子是一些数据对象。

struct TextNumber {
    let text: String
    let number: Int
}

以下是我想对数据做些什么的要点。

func sendUpTextNumberArray(arrayOfTextNumber: [TextNumber]) {
    var convertedData = [[String:AnyObject]]()
    for textNumber in arrayOfTextNumber {
        convertedData.append(textNumber.convert())
    }
    Service.sendJSON(convertedData)
}

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

Swift 2

let setOfIntegers = Set([1,2,3])
let arrayOfIntegers = [1,2,3]

func sum<T: SequenceType where T.Generator.Element == Int>(integers: T) -> T.Generator.Element {
    return integers.reduce(0, combine: +)
}

sum(arrayOfIntegers)  // 6
sum(setOfIntegers)    // 6

Swift 3

func sum<T: Sequence where T.Iterator.Element == Int>(_ integers: T) -> T.Iterator.Element {
    return integers.reduce(0, combine: +)
}

sum(arrayOfIntegers)  // 6
sum(setOfIntegers)    // 6