PDATE: Utilisez des structures et non des classes. Struct est meilleur à bien des égards a son propre initialiseur.
Ceci est ma classe de modèle. Est-il possible de créer automatiquement la méthode init
? Chaque fois, je dois initialiser toutes les variables une par une et cela coûte beaucoup de temps.
class Profile {
var id: String
var name: String
var image: String
init(id: String, name: String, image: String) {
self.id = id
self.name = name
self.image = image
}
}
Je voudrais self.id = id
et d'autres variables pour initialiser automatiquement.
Mise à jour À partir de Xcode 11.4
Vous pouvez refactor
(menu contextuel de la souris) pour avoir généré la classe et la structure memeberwise initializer
.
Remarque: struct
les initialiseurs automatiques sont internes. Vous pouvez quoi générer memeberwise initializer
lorsque vous écrivez un module pour le rendre public
.
Clic droit> Refactoriser> 'Générer l'initialisation Memberwise'
Pour les anciens Xcodes
Il existe un plugin pratique pour Xcode: https://github.com/rjoudrey/Swift-init-generator ou https://github.com/Bouke/SwiftInitializerGenerator
Merci aux créateurs de plugins.
Nous pouvons le faire avec les outils suivants:
Xcode Version 10.1 (10B61)
Toolchain: Swift Development Snapshot 2018-12-25 (a) // Not sure if the toolchain matters.
Étant donné la classe suivante (ou pour les structures si vous changez temporairement le mot clé struct
en class
et après refactor, revenez à struct
):
class MyClass {
let myIntProperty: Int
let myStringProperty: String
let myOptionalStringProperty: String?
let myForcedUnwrappedOptionalStringProperty: String!
}
Accédez à Xcode et:
Les étapes ci-dessus ressemblent à ceci:
Juste une petite seconde plus tard, Xcode génère cet initialiseur:
internal init(myIntProperty: Int, myStringProperty: String, myOptionalStringProperty: String?, myForcedUnwrappedOptionalStringProperty: String?) {
self.myIntProperty = myIntProperty
self.myStringProperty = myStringProperty
self.myOptionalStringProperty = myOptionalStringProperty
self.myForcedUnwrappedOptionalStringProperty = myForcedUnwrappedOptionalStringProperty
}
Non, il n'y a pas une telle fonctionnalité pour les classes. Mais, si vous le concevez comme un struct
, vous obtenez un initialiseur membre gratuitement - en supposant que vous ne définissez pas d'autres initialiseurs vous-même .
Par exemple:
struct Point {
var x: Float
var y: Float
}
...
var p = Point(x: 1, y: 2)
Depuis Le livre Swift Programming Language:
Les types de structure reçoivent automatiquement un initialiseur membre par membre s'ils ne définissent aucun de leurs propres initialiseurs personnalisés. Contrairement à un initialiseur par défaut, la structure reçoit un initialiseur par membre même si elle possède des propriétés stockées qui n'ont pas de valeurs par défaut.
L'initialiseur membre par membre est un moyen abrégé d'initialiser les propriétés de membre des nouvelles instances de structure. Les valeurs initiales des propriétés de la nouvelle instance peuvent être transmises à l'initialiseur membre par nom.
Dans la nouvelle version de XCode;
Tout d'abord, cliquez sur la ligne qui contient la classe "yourclassname {" puis faites un clic droit et sélectionnez "Afficher les actions de code". Ensuite, vous pouvez cliquer sur "Générer l'initialiseur Memberwise". Et c'est tout.
1 -> Tout d'abord la ligne de clic qui contient la classe "yourclassname {"
2-> clic droit et sélectionnez "Afficher les actions de code".