J'ai ce morceau de code j'ai besoin ai-je besoin écrire deux versions de dosomething () code> à appeler pour chaque valeur valide transmise à
Démarrer () < / code>. Et quand
t code> est déjà un type facultatif tel que
string? Code>, puis
nil code> est une valeur valide. P>
start () code> dans des extensions de
myObject code> avec des conditions du type de
t code>? Et comment le faire? P> p>
4 Réponses :
Puisque la valeur = la valeur échoue avec la deuxième entrée, vous devez gérer ce cas séparément.
func start(_ value: T?) { if let value = value { doSomething(value) } else { print("nil input") } }
Merci pour votre temps! Cependant, ce que je voulais dire, c'est que j'ai besoin de DOSOMOATHIAT: CODE> à appeler pour chaque valeur valide transmise à
-Start: code>. Et quand
t == chaîne? Code>, alors "nil" est une valeur valide. Une solution de contournement dans le
-Start: code> ne correspond pas à mes besoins.
Dans le cas de la valeur est nul, lorsque vous découlez, la valeur n'entrera pas dans la déclaration IF. Au lieu de cela, vous pouvez le faire:
class MyObject<T> { func start(_ value: T?) { if let value = value { doSomething(value) } else { print("nil") } } func doSomething(_ value: T) { print(value) } }
Facultatif à Swift est juste une énumération générique qui dispose de deux cas: par exemple si vous déclarez ceci signifie que si vous l'appelez comme essentiellement maintenant, l'option externe existe et le déclenchement fonctionne, mais l'interne est Cependant, je ne peux toujours pas comprendre pourquoi auriez-vous besoin de faire quelque chose comme ça p> p> string? code> est la même chose de
en option
myObject
myObject
démarrage code> sera p>
Démarrer (nil) code>, l'objet entier Sera bien sûr nul et le
si laisse code> échouera.
Vous pouvez toutefois appeler cette fonction de cette manière p>
nil code>. < / p>
Vous pouvez faire votre si vous voulez laisser le paramètre sur depuis Si vous l'appelez comme: p> ou p> alors il imprimera "nil" p> p> Démarrer CODE> Fonction Prenez un
t code> non facultatif et appelez tout simplement toujours
DOSOMODESH code> au lieu d'essayer de le déballer en premier. Cela ne vous permettrait que d'appeler
start (nil) code> si
t code> était un type optionnel:
Démarrer code> comme optionnel, votre code d'origine fonctionnera réellement, mais vous devez modifier la façon dont vous transmettez votre valeur dans votre deuxième exemple. p>
t < / code> est
string? code>, le paramètre de votre méthode est de type
string ?? code> et en passant un nil
string ?? code> est différent de passer Un avec une chaîne
? code> qui arrive à contenir
nil code>. p>
Pourquoi auriez-vous besoin de quelque chose comme ça?