2014-08-29 6 views
7

In Java könnten Sie eine generische Methode ähnlich wie unten haben, wo der Typ explizit angegeben und an die Methode als Argument übergeben wird. Ist das mit schnell möglich?Swift - Generische Methoden

public T fetchObject(Class<T> clazz, int id) { 
    // My table name is the same as class name 
    // So based on the generic type passed to method I want to fetch that record. 
} 

User user = fetchObject(User.class, 5); 

Was ich versuche

public func fetchObject (id: Int /* Somehow pass the type */) -> T? { 
    // I need a way to know what class type has to be used with this generic method 
    // Create NSEntityDescription based on the generic class passed 
    // managedObjectContext getExistingObjectById 
} 
+0

-1? Wie wäre es mit einem Kommentar? – aryaxt

+0

@Zaph ich tat, und ich weiß bereits, wie man allgemeine Funktionen in swift schreibt. Dies ist ein spezieller Fall, in dem Sie auch die Klassenart – aryaxt

+0

übergeben. Ja, die Drive-by-Down-Stimmen ohne Grund sind nicht hilfreich und eher wie Wiesel. – zaph

Antwort

7

T.Type zu erreichen ist, was ich verwenden musste, sogar besser als wie Java behandelt diese

public func fetchObject<T> (id: Int, type: T.Type) -> T? { 

} 

Nutzungs

var myClass = fetchObject(5, MyClass.self) 
+0

Würde nicht eine Reihe von Überlastungen in diesem Fall besser? Beispiel: 'func fetchObject (id: Int, type: User.Type) -> User', oder noch besser:' func fetchUser (id: Int) -> User'? – CouchDeveloper

+0

Dies war nur ein Beispiel, das ich zur Verfügung gestellt habe, um das Problem zu erklären. Was ich eigentlich erreichen möchte, ist eine Methode, die ein Dictionary und einen Klassentyp annimmt, dann basierend auf Schlüssel/Werten erstellt und ein NSManagedObject auffüllt und den Kontext speichert. – aryaxt

+0

Dann, warum nicht ein Dictionary of Keys/Closures? Könnte möglicherweise auch viel eleganter enden. – CouchDeveloper