2016-10-17 9 views
0

私はCloudKitの使用に戻っています。私が再訪しているプロジェクトでは、クエリのフェッチが実行されており、CKRコードの配列が残っています。私はこの配列をTableController経由で表示するように設定しています。とにかく、私はこのコード(動作します)を1行持っています...しかし、私はなぜNSIndexPathとしてindexPathを設定しているのか分かりません。indexPathとNSIndexPathを含むコードが動作しますが、なぜそれは重複していますか?

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "dining") as! table1cell 
    let restaurant: CKRecord = categories[(indexPath as NSIndexPath).row] 
    cell.Name.text = restaurant.value(forKey: "Name") as? String 

    return cell 

私の他のCKRecord TableControllerプロジェクトでは、本質的にindexPathを設定する必要はありません。私はここで何が欠けていますか?

+0

いくつかの文脈を提供してください。このコード行はどこにありますか? 'indexPath'がどのように宣言されているかを示します。 – rmaddy

+0

Swift 2または3を使用しているかどうかを明確にしてください。 – rmaddy

+0

これは速い3です。 – jonpeter

答えて

2

NSIndexPathへのキャストの使用は無意味です。単に行を次のように変更してください:

let restaurant: CKRecord = categories[indexPath.row] 
0

明示的に型指定されたvarにindexPathが格納されていない場合は、おそらくコンパイルメッセージを避けるためにキャストしています。コンパイラがindexPathの型がNSIndexPathであることがわからない場合は、.rowプロパティにアクセスするとエラーが発生する可能性があります。

ここで、indexPathを宣言/格納していますか? as NSIndexPathキャストを削除するとどうなりますか?

編集:再読み込みあなたの質問、私は答えがあると信じて:

「あなたはタイプNSIndexPathであるようにindexPathに保存されているものは何でもあなたが自分自身としてindexPathを格納していないキャストされている」

関連する問題