Swift verfügt über erstklassige Funktionen, die als Argumente übergeben werden können.Erstklassige generische Funktion in swift?
func a() {
}
func b(x:()) {
}
// Pass a to b…
b(a)
Swift hat generische Funktionen.
func generic<T>(x: T) {
}
Aber tut Swift mich an eine andere Funktion eine generic Funktion als Argument übergeben lassen?
let anIntService = Service<Int>()
let astringService = Service<String>()
func attach<T>(service: Service<T>, to value: T) {
// Perform type safe attaching of `value` to `service`.
}
func doAttaching(attach: (Service<T>, to T)->Void) {
attach(anIntService, to: 42)
attach(aStringService, to: "Hello World!")
}
doAttaching(attach)
... Oder lässt es mich nur eine spezifische Instanziierung einer generischen Funktion passieren?
Wenn dies möglich ist, veranschaulichen Sie bitte die Syntax zum Definieren einer Funktion, die eine generische Funktion als Argument akzeptiert.
Wenn dies nicht unterstützt wird, besteht eine Umgehungslösung darin, die generische Funktion als eine Methode einer Struktur oder etwas zu definieren und statt dessen eine zu übergeben. Dies ist zwar nicht ideal, da die verzehrende Funktion nicht eine so schöne Berufung Syntax bekommt, was sie tun müssen:
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}
Danke für die Antwort, aber ich denke nicht, dass das tut, was ich brauche. So ruft die aufgerufene Funktion in Ihrem Beispiel, callFunction, die generische Funktion immer noch nicht auf. Es erhält eine bestimmte Instanz davon, bestimmt durch den Typ des 'Parameters', den Sie aufrufen - in diesem Fall '123', also ein Int. Ich möchte die 'Identität' in Ihrem Beispiel als eine _fully generic_ Funktion an 'callFunction' übergeben. Die Definition von 'callFunction' kann dann ihr' function' -Argument mit mehreren Typen aufrufen. – Benjohn
Oh ich sehe, sorry, ich habe den Beitrag missverstanden :( – Alexander
Kein Problem! Danke trotzdem :-) – Benjohn