2017-04-08 2 views
4

Cet avertissement est-il quelque chose dont je devrais me préoccuper?Relier 'NSNumber' à l'avertissement 'Int'

warning

Si oui ce serait une solution? ceci est ma fonction:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if let destination = segue.destination as? ProfileViewController{ 
    let cell = sender as! UITableViewCell 
     let selectedRow = myTableView.indexPath(for: cell)!.row 


     switch (mySegmentedControl.selectedSegmentIndex){ 
     case 0: 
      destination.nameVar = userSFList[selectedRow].name! 
      destination.imageOneURL = userSFList[selectedRow].image! 
      destination.bioVar = userSFList[selectedRow].bio! 

      if let image2 = userSFList[selectedRow].imageTwo { 
       destination.imageTwoUrl = image2    } 

      if let contactInt = userSFList[selectedRow].contact as? Int { 
       destination.contact = contactInt 
      } 

      break 

     case 1: 

      destination.nameVar = userEBList[selectedRow].name! 
      destination.imageOneURL = userEBList[selectedRow].image! 
      destination.imageTwoUrl = userEBList[selectedRow].imageTwo! 



      if let contactInt = userEBList[selectedRow].contact as? Int { 
       destination.contact = contactInt 
      } 


      break 
     case 2: 
      destination.nameVar = userSFOList[selectedRow].name! 
      destination.imageOneURL = userSFOList[selectedRow].image! 

      if let contactInt = userSFOList[selectedRow].contact as? Int { 
       destination.contact = contactInt 
      } 

      break 
     case 3: 
      destination.nameVar = userSJList[selectedRow].name! 
      destination.imageOneURL = userSJList[selectedRow].image! 
        if let contactInt = userSJList[selectedRow].contact as? Int { 
       destination.contact = contactInt 
      } 
      break 
     default: 
      break 

    } 
} 

}

J'utilise un contrôle segmenté avec quatre segments différents et en tirant les données à l'aide firebase.

+1

essayez de faire quelque chose comme: 'destination.contact = userEBList [selectedRow] .contact.intV alue'; à moins que ce soit un optionnel et alors vous auriez probablement besoin de faire quelque chose comme 'destination.contact = userEBList [selectedRow] .contact.intValue ?? 0 (c'est-à-dire un défaut de zéro). –

+0

Pourquoi avez-vous le même code répété 3 fois? – Alexander

+0

@Alexander Il ressemble à trois cas différents: userEBList, userSJList et userSFOList. –

Répondre

4

Ma règle personnelle est toujourszéro avertissements.
Mieux vaut prévenir que guérir.

Est-ce que contact est Optional? Si oui ...

Vous pouvez utiliser Optional Binding:

if let contactInt = userSFOList[selectRow].contact as? Int { 
    destination.contact = contactInt 
} 

Ou le Nil-Coalescing Operator:

destination.contact = userSFOList[selectedRow].contact.intValue ?? <Your default Int here> 

Vous pouvez également utiliser guard comme l'a souligné @ Kamil.S, comme:

guard let nameVar = userSFOList[selectedRow].name, 
    let imageVar = userSFOList[selectedRow].image, 
    let contactVar = contact as? Int else { 
    // Conditions were failed. `return` or `throw`. 
    } 

destination.nameVar = nameVar 
destination.imageOneURL = imageVar 
destination.contact = contactVar 
+0

Une telle incompatibilité de type serait-elle un bon candidat pour une garde gracieuse? –

+1

@ Kamil.S J'aime ça. J'ai mis à jour ma réponse avec votre suggestion. –