2016-07-27 57 views
0

基本上我想能够通过Set<Int>[Int]或任何东西,至少,我可以迭代通过一组无序的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) 
} 
+0

你能提供什么该功能将与做榜样函数参数本身? –

+0

我想你将不得不为实际功能选择一个(我会建议'[Int]'),然后创建第二个函数来包装第一个函数:'firstFunction(Array(input))' – Paulw11

+0

@Dan,I只是增加了一个例子。利奥达布斯给出了一个很好的答案,可以满足我的需求,但我也愿意接受其他任何方面的答案。谢谢! – KKendall

回答

2

你可以做如下:

斯威夫特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 

斯威夫特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 
+0

太棒了!我认为这是可能的,只是想不出正确的做法。谢谢! – KKendall

相关问题