Ich habe ein schnelles Framework, das eine Struktur definiert:
public struct CollectionTO {
var index: Order
var title: String
var description: String
}
Ich kann jedoch den impliziten Member-Initialisierer aus einem anderen Projekt, der die Bibliothek importiert, nicht verwenden. Der Fehler ist 'CollectionTO' kann nicht initialisiert werden, da keine Initialisierer vorhanden sind. Das heißt, es gibt dem impliziten Member-Standard-Initialisierer nicht das öffentliche Schlüsselwort.
var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")
Ich muss meine eigene Init-Methode wie folgt hinzufügen:
public struct CollectionTO {
var index: Order
var title: String
var description: String
public init(index: Order, title: String, description: String) {
self.index = index;
self.title = title;
self.description = description;
}
}
... aber ich würde lieber nicht, wenn es eine andere Möglichkeit gibt, die jemand kennt?
Ich habe das Handbuch gelesen:
"Standardmäßige Memberwise-Initialisierer für Strukturtypen Der standardmäßige Memberwise-Initialisierer für einen Strukturtyp wird als privat betrachtet, wenn eine der gespeicherten Eigenschaften der Struktur privat ist. Andernfalls verfügt der Initialisierer über eine interne Zugriffsebene.
Wenn Sie möchten, dass ein öffentlicher Strukturtyp mit einem Memberwise-Initializer initialisiert werden kann, wenn er in einem anderen Modul verwendet wird, müssen Sie wie beim Standardinitialisierer einen öffentlichen Memberwise-Initialisierer selbst als Teil der Typdefinition angeben. "
Auszug aus "Die Programmiersprache Swift" , Abschnitt "Zugriffskontrolle" .
Obwohl es nicht möglich ist, den standardmäßigen memberwise-Initialisierer zu verwenden, können Sie mit den folgenden Schritten schnell einen erstellen:
Bis Apple dies ändert und weniger lästig wird, können Sie https://github.com/Bouke/SwiftInitializerGenerator (oder eine andere). Es wird also weniger Arbeit sein. Probiert und es funktioniert. Xcode Version 10.0, High Sierra 10.13.6
Wir haben jetzt einen Rubin-Edelstein. um eine vollständige Swift-Datenmodelldatei Zeile für Zeile zu parsen und Modifizierer für den öffentlichen Zugriff, öffentliche, mitgliedswerte Standardinitialisierer und andere Elemente in eine separate automatisch generierte Swift-Ausgabedatei zu parsen.
Dieses Juwel heißt Swift_republic
Bitte lesen Sie die folgende Dokumentation, um diesen Edelstein auszuführen: