Ich möchte eine Factory-Funktion erstellen, die einen Klassentyp akzeptiert und einen Konstruktor zurückgibt, damit ich sie verwenden kann Dieser Konstruktor erstellt später eine Instanz dieser Klasse.Swift: Erstellen einer Factory-Funktion, die einen Klassentyp als Parameter akzeptiert und einen Konstruktor dieser Klasse ausgibt
Stellen Sie sich vor, ich habe zwei Klassen, Apple und Orange, die beide Unterklassen von Fruit sind. Sie müssen mit einem unknownNumber
initialisiert werden, von dem ich erst später weiß.
class Apple: Fruit {
init(unknownNumber: Int) {
...
}
}
class Orange: Fruit {
init(unknownNumber: Int) {
...
}
}
Ich möchte eine Fabrik-Funktion erstellen, die in einer Klasse-Typ nimmt, so dass ich später diese Funktion aufrufen können und die spezifische Unterklasse von Obst, mit dem unknownNumber initialisieren.
//concept:
func makeFruit(typeOfFruit) -> (Int) -> Fruit {
return { (unknownNumber: Int) -> Fruit in
return typeOfFruit(unknownNumber)
}
}
Um eine orangeFactory, dann zu erstellen, was ich tun kann:
let orangeFactory = makeFruit(Orange)
// then at a later time when I have the unknown number
let orangeInstance = orangeFactory(unknownNumber)
Ich bin mir der Möglichkeit, einfach den unknownNumber
einen faulen Variable zu machen, aber in meinem speziellen Fall die unknownNumber
ist nicht nur eine Nummer und es beinhaltet andere Prozesse, also möchte ich nur das Objekt erstellen, wenn ich alles zur Verfügung habe, um die Struktur einfach zu halten.
Ist so etwas in Swift möglich? Ich recherchiere seit einiger Zeit online und konnte keine direkten Antworten finden. Jede Hilfe würde sehr geschätzt werden!
Dies ist eine ausgezeichnete Antwort. Die Methode scheint so einfach zu sein, erfordert aber auch die Kenntnis vieler kleiner Eigenheiten von Swifts Objekterzeugungsmodell. Ich probiere das jetzt aus und werde Sie bald wissen lassen, ob es funktioniert! – gokeji