J'ai un framework Swift qui définit une structure:
public struct CollectionTO {
var index: Order
var title: String
var description: String
}
Cependant, je ne semble pas pouvoir utiliser l'initialiseur sage des membres implicite d'un autre projet qui importe la bibliothèque. L'erreur est 'CollectionTO' ne peut pas être initialisé car il n'a pas d'initialiseurs accessibles. c’est-à-dire qu’il ne donne pas au mot implicite public le membre implicite par défaut.
var collection1 = CollectionTO(index: 1, title: "New Releases", description: "All the new releases")
Je dois ajouter ma propre méthode init comme suit:
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;
}
}
... mais je préférerais pas s'il y a une autre façon de savoir?
J'ai lu le manuel:
"Initialiseurs de membre par défaut pour les types de structure L’initialiseur de membre par membre pour un type de structure est considéré comme privé si l’une des propriétés stockées est privée. Sinon, l’initialiseur a un niveau d’accès interne.
Comme pour l’initialiseur par défaut ci-dessus, si vous souhaitez qu'un type de structure publique puisse être initialisé avec un initialiseur memberwise lorsqu’il est utilisé dans un autre module, vous devez lui-même fournir un initialiseur public memberwise dans le cadre de la définition du type. "
Extrait de "Le langage de programmation Swift" , section "Contrôle d'accès" .
Bien qu'il ne soit pas possible d'avoir au moins l'initialiseur memberwise par défaut, vous pouvez en créer un rapidement en procédant comme suit:
Jusqu'à ce que Apple change cela et le rende moins ennuyeux, vous pouvez utiliser https://github.com/Bouke/SwiftInitializerGenerator (ou tout autre type) Pour créer des initialiseurs publics. Donc, ce sera moins de travail. Essayé et ça marche. Xcode version 10.0, High Sierra 10.13.6
Nous avons maintenant un bijou Ruby ???? pour analyser un fichier de modèle de données Swift complet, ligne par ligne, et ajouter des modificateurs d'accès public, des initialiseurs par défaut publics aux membres et d'autres éléments dans un fichier de sortie Swift généré automatiquement.
Ce joyau s'appelle Swift_republic
Veuillez consulter la documentation suivante pour exécuter cette gemme: