web-dev-qa-db-fra.com

Swift 2: la valeur immuable X n'est jamais utilisée, pensez à la remplacer par '_'

Dans plusieurs cas de mon ancien code, je reçois l'avertissement:

La valeur immuable X n'est jamais utilisée, pensez à la remplacer par "_"

Par exemple, cela se produit souvent si je vérifie une énumération qui a un objet associé (mais je n'utilise pas l'objet dans ce cas) - ou si j'utilise la construction 'If let' pour vérifier si un objet est nul ou non .

Cela ne me dérange pas beaucoup de passer par ces avertissements et d'apporter les modifications, mais je me demandais si quelqu'un savait pourquoi cela était recommandé - pourquoi s'embêter à nous en avertir? Cela affecterait-il les performances de quelque manière que ce soit?

26
james_alvarez

Ces modifications sont recommandées car si vous n'utilisez pas du tout ces variables, vous devriez envisager de les remplacer par "_". Ainsi, vous (et d'autres personnes) pourrez plus tard comprendre votre intention plus rapidement.

En termes de performances, ce ne serait probablement qu'une amélioration mineure que vous ne remarquerez pas du tout. La même situation s'applique lors de la compilation et de l'optimisation de votre code.

11
Qbyte

La valeur immuable X n'est jamais utilisée, pensez à la remplacer par '_'

cet avertissement vient parce que vous n'utilisez pas votre variable après l'avoir déclarée. ignorez simplement l'avertissement et continuez à écrire votre code et utilisez votre objet, il disparaîtra.

Swift 2 est un langage très sensible qui vous avertira à chaque étape.

j'explique une simple démonstration d'avertissement de tout objet ici: - 1 .la valeur immuable X n'est jamais utilisée, pensez à la remplacer par '_' cela viendra lorsque vous n'utiliserez pas d'objet et le déclarerez seulement . Ex:-

var nameImg:String = "";

2 .la variable 'nameImg' a été écrite, mais jamais lue. elle viendra lorsque vous assignerez une valeur à votre objet mais que vous ne l'utiliserez toujours dans aucun autre objet. Ex-

  var nameImg:String = "";
                    if(action==1){
                        nameImg  = "navTab";
                    }
                    else{
                        nameImg  = "back";
                    }

3. Aucun avertissement viendra si vous attribuez une valeur à votre objet et l'utilisez également dans un autre objet;).

Ex-

 var nameImg:String = "";
                    if(action==1){
                        nameImg  = "navTab";
                    }
                    else{
                        nameImg  = "back";
                    }


                    //back & menu btn
                    let btnBack = UIButton(type: UIButtonType.Custom);
                    btnBack.setImage(UIImage(named:nameImg), forState: UIControlState.Normal);
                    btnBack.sizeToFit();
20
Abhimanyu Rathore

C'est parce que votre valeur n'a jamais été utilisée après l'avoir déclarée, j'ai eu le même problème il n'y a pas si longtemps.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)


    let row = indexPath.row <-----

J'ai trouvé qu'en l'imprimant juste après, l'erreur avait disparu.

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)


    let row = indexPath.row <---
    print(row) <---
2
freddieoh

En règle générale, vous devez travailler sans avertissement dans le travail quotidien. La raison évidente est que vous allez manquer les avertissements réels et importants si votre code produit des centaines d'avertissements moins importants.

Le cas que vous décrivez est mieux résolu de cette façon: au lieu d'utiliser if let myObject = myObject vous feriez mieux d'utiliser:

if myObject != nil 

De cette façon, il est clair ce que vous voulez faire.

1
Darko