2016-07-27 10 views
0

Grundsätzlich mag ich in entweder Set<Int> können passieren kann passieren oder [Int] oder irgend etwas, wo zumindest, ich durch eine ungeordnete Menge von Int laufen kann.Funktionsparameter, wo ich in Set <Int> oder [Int]

Ich möchte lieber nicht [Int] in eine Set<Int> umwandeln (und umgekehrt). Und ich würde gerne vermeiden, Funktionen zu machen, die etwas anderes erfordern ([Int] oder Set<Int>), aber mach dasselbe, was ich gerade mache.

Ich benutze diese Funktion an vielen Orten und die Anrufer kümmern sich manchmal um Reihenfolge ([Int]) und manchmal nicht (Set<Int>). Die Funktion erfordert jedoch keine bestimmte Reihenfolge.


Etwas wie folgt aus:

extension SequenceType where Generator.Element: Int { } 

aber als Parameter.


Funktion Beispiel (nach Wunsch):

Die Int wie oben erläutert nur zur Vereinfachung war, mein Beispiel ist einige Datenobjekt.

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

Und hier ist das Wesentliche, was ich mit den Daten machen will.

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

Können Sie ein Beispiel für das, was diese Funktion mit der tun würde Funktionsparameter selbst? –

+0

Ich denke, Sie müssen einen für die eigentliche Funktion auswählen (ich würde '[Int]' vorschlagen) und dann eine zweite Funktion erstellen, die die erste umschließt: 'firstFunction (Array (Eingabe))' – Paulw11

+0

@Dan, I habe gerade ein Beispiel hinzugefügt. Leo Dabus hat eine tolle Antwort gegeben, die für meine Bedürfnisse funktioniert, aber ich bin offen für alles andere. Vielen Dank! – KKendall

Antwort

2

Sie können wie folgt tun:

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 
+0

Super! Ich dachte, es wäre möglich, konnte einfach nicht den richtigen Weg finden, es zu tun. Vielen Dank! – KKendall

Verwandte Themen