Primordial Enum init?(rawValue: String) pour ne pas être en option
Je veux avoir l'init de rawValue pour mon enum Swift pour retourner la valeur par défaut si rawValue init sera de retour nul.
Maintenant j'ai quelque chose comme ceci:
public init(fromRawValue: String){
self = Language(rawValue: fromRawValue) ?? .English
}
Je n'aime pas cela, car il est complètement initializer.
J'ai essayé de faire quelque chose comme ceci:
public init(rawValue: String){
self = Language(rawValue: fromRawValue) ?? .English
}
Mais j'ai eu runtime exception avec un mauvais accès. Je peux en quelque sorte le faire fonctionner ou j'ai juste à utiliser cette nouvelle et je ne peut pas remplacer celui d'origine pour ne pas être en option?
Je voudrais savoir si il possible de remplacer init d'origine de rawValue pas de solution complètement nouvelle qui est à l'aide de failable un.
- Double Possible de Nonfailable enum initialiseur avec la valeur par défaut
Vous devez vous connecter pour publier un commentaire.
L'initialisation par défaut est
failable
. Cela signifie que si le reçu paramètre ne correspond pas valide enum cas, il n'est de retournil
.Maintenant, vous voulez faire 2 choses incompatibles:
Ce n'est pas possible, j'ai les 3 solutions possibles comme suit:
1) la Création d'un autre init
Vous définissez un nouveau pas failable initialisation avec une valeur par défaut, un autre nom du paramètre et à l'intérieur de ce que vous appelez la valeur par défaut failable initialiseur.
2) Redéfinition de la valeur par défaut init
Vous redéfinir l'initialisation par défaut, vous en faites pas failable et vous écrivez la logique à l'intérieur.
3) la Création d'un func statiques
Vous pouvez maintenant construire un
Language
valeur de l'écriture:Language
en approche #1 's de l'initialiseur detype(of: self).init
pour une approche plus générique.L'ajout de Luca la solution pour la redéfinition de l'init par défaut, il est possible de faire de la
rawValue
type de paramètre facultatif, ce qui réduit le code sur le site d'appel lorsque la source de données n'est pas fiable.Quand j'ai d'abord essayé ce qu'elle a généré de multiples erreurs. La clé a été de redéfinir le
RawValue
typealias de maintenir la conformité auxRawRepresentable
.