2016-07-16 17 views
0

NSArrayをNSIndexPathにキャストしていますので、reloadRowsAtIndexPathで使用できます。誰でもより良い解決策を提案できます。なぜ「NSArrayから無関係型にキャストしますか? NSIndexPathは常に失敗する "と私はこれについて心配する必要がありますか?Swift:NSArrayから無関係な型NSIndexPathへのキャスト常に失敗します

コード

let indexArray : NSIndexPath? = NSArray(Objects:NSIndexPAth(forRow: 0, inSection:2)) as? NSIndexPath 
self.myTableView.reloadRowsAtIndexPaths(indexArray!], withRowAnimation:UITableViewRowAnimation.None) 

答えて

4

あなたは間違いなくあなたは非常に次の行に(!で)それをアンラップ強制特にので、そのことについて心配する必要はあります。この警告は、NSArrayNSIndexPathにキャストしていることを示していますが、そのことはできません。言い換えれば、indexArrayは常にnilになります。そして、次の行で展開を強制するので、常にクラッシュします。

NSIndexPathにキャストする必要がないため、reloadRowsAtIndexPaths()には、作成したインデックスパスの配列が必要ですが、はるかに簡単に作成できます。ここにあなたのコードを書き換えるする簡単な方法があります:

let indexPath = NSIndexPath(forRow: 0, inSection:2) 
self.myTableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None) 

[indexPath]手段「indexPathを含む配列を」、それはreloadRowsAtIndexPaths()が非常に簡単に探している配列を作成するようにします。ご覧のように、キャスティングは必要ありません。

if letと他の安全なアンラッピング方法を可能な限り使用する必要があることに注意してください。Swiftの初心者は!が「今すぐクラッシュしてください」というふりをするべきです。 :)

+3

'NSIndexPath'イニシャライザはオプションを返しません。アンラップすることはできません。 – dan

+0

ありがとう@ダン!一定。 – andyvn22

関連する問題