Eh bien, si vous êtes force coulée comme Direction
un élément qui est pas un Direction
alors vous aurez certainement une erreur à un moment donné.
Le code:
let dir = parameters[0] as! Direction
est certainement pas une bonne idée ici.
Qu'est-ce que vous pourriez faire à la place de la force de coulée, est la construction de votre objet en utilisant l'rawValue
, et en prenant soin de l'affaire lorsque votre élément n'existe pas pour qu'il ne retourne pas nil
(qui est le comportement par défaut).
que vous avez un ENUM de fruits:
enum Fruit: String {
case apple = "apple"
case banana = "banana"
case mango = "mango"
case cherry = "cherry"
init(rawValue: String) {
switch rawValue {
case "apple" : self = .apple
case "banana" : self = .banana
case "mango" : self = .mango
case "cherry" : self = .cherry
default: self = .apple
}
}
}
Comme vous pouvez ici j'utiliser le mon ENUM init
pour revenir « pomme » de toute façon à chaque fois que la valeur est quelque chose que je veux.
Et maintenant, vous pouvez faire:
let fruit = Fruit(rawValue: "pear")
print(fruit) // Prints "apple" because "pear" is not one of the fruits that I defined in my enum.
let otherFruit = Fruit(rawValue: "banana")
print(otherFruit) // Prints "banana"
Et bien sûr, vous pouvez l'utiliser dans votre fonction de manière similaire :)
Note: S'il vous plaît noter que vous auriez encore pour gérer le cas lorsque votre nom de fruit est nil
(ou tout autre type qui n'est pas une chaîne) parce que le rawValue
ne faut être un String
. Vous pouvez utiliser une instruction if ou a guard pour vérifier si c'est un String
ou pas avant d'essayer de construire votre fruit en utilisant le rawValue
.
ce que vous attendez en fonction printDirection? Seulement imprimer les directions? –
Pourquoi les paramètres sont-ils un tableau de 'Any' plutôt qu'un tableau de' direction'? – Michael
C'est tout parce que je veux passer d'autres paramètres avec des types différents. Ici, c'est juste un exemple. – Anton