2016-07-27 97 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

相關問題