2017-04-08 22 views
4

この警告は何か心配すべきですか?'NSNumber'を 'Int'に設定する警告

warning

ので、何が解決策になりますか? これは私の関数である:

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 

    } 
} 

}

私は、4つの異なるセグメントを持つセグメント化されたコントロールを使用してfirebaseを使用してデータを引っ張っています。

+1

次のようにしてください: 'destination.contact = userEBList [selectedRow] .contact.intV alue';オプションでなければ、おそらく 'destination.contact = userEBList [selectedRow] .contact.intValue ??のようなことをする必要があります。 (すなわち、デフォルトのゼロ)。 –

+0

同じコードを3回繰り返したのはなぜですか? – Alexander

+0

@Alexanderそれは、userEBList、userSJList、userSFOListという3つの異なるケースのように見えます。 –

答えて

4

私の個人的なルールは、常にです。ゼロ警告です。
ごめんなさいよりも安全です。

contactOptionalですか?

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

またはNil-Coalescing OperatorOptional Binding

あなたが使用することができます...もしそうなら

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

あなたはまた、guardを使用することができますように、@ Kamil.Sで指摘したように:

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

そのようなタイプのミスマッチは、それ以外の優雅なガードには適していますか? –

+1

@ Kamil.S私はそれが好きです。私はあなたの提案で私の答えを更新しました。 –

関連する問題