0
votes

SWIFT Type générique facultatif et sans appels optionnels

J'ai ce morceau de code xxx

j'ai besoin dosomething () à appeler pour chaque valeur valide transmise à Démarrer () < / code>. Et quand t est déjà un type facultatif tel que string? , puis nil est une valeur valide.

ai-je besoin écrire deux versions de start () dans des extensions de myObject avec des conditions du type de t ? Et comment le faire?


1 commentaires

Pourquoi auriez-vous besoin de quelque chose comme ça?


4 Réponses :


0
votes

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")
    }
}


1 commentaires

Merci pour votre temps! Cependant, ce que je voulais dire, c'est que j'ai besoin de DOSOMOATHIAT: à appeler pour chaque valeur valide transmise à -Start: . Et quand t == chaîne? , alors "nil" est une valeur valide. Une solution de contournement dans le -Start: ne correspond pas à mes besoins.



0
votes

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)
    }
}


0 commentaires

0
votes

Facultatif à Swift est juste une énumération générique qui dispose de deux cas: xxx

par exemple string? est la même chose de en option .

si vous déclarez myObject Vous créez ce myObject > , donc votre Béton démarrage sera xxx

ceci signifie que si vous l'appelez comme Démarrer (nil) , l'objet entier Sera bien sûr nul et le si laisse échouera. Vous pouvez toutefois appeler cette fonction de cette manière xxx

essentiellement maintenant, l'option externe existe et le déclenchement fonctionne, mais l'interne est nil . < / p>

Cependant, je ne peux toujours pas comprendre pourquoi auriez-vous besoin de faire quelque chose comme ça


0 commentaires

2
votes

Vous pouvez faire votre Démarrer Fonction Prenez un t non facultatif et appelez tout simplement toujours DOSOMODESH au lieu d'essayer de le déballer en premier. Cela ne vous permettrait que d'appeler start (nil) si t était un type optionnel: xxx

si vous voulez laisser le paramètre sur Démarrer 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.

depuis t < / code> est string? , le paramètre de votre méthode est de type string ?? et en passant un nil string ?? est différent de passer Un avec une chaîne ? qui arrive à contenir nil .

Si vous l'appelez comme: xxx

ou xxx

alors il imprimera "nil"


0 commentaires