2017-02-22 36 views
0

私はチュートリアルの本を使っています。私はSwiftの配列へのアクセス方法について質問しています。このタイプがツリーまたは配列内の特定のノードへのパスを表すと仮定しているため、IndexPath型を直接使用するとどうなるか分かりました。 "Cannot subscript value of type [ToDoItem] with an index of type IndexPath"SwiftのInt型とIndexPath型の使用

func item(at indexIWant: IndexPath) -> ToDoItem { 

     return toDoItems[indexIWant] 
    } 

が、私はこれが素人という点で意味があるかを知るために興味があるだけだと、なぜこれが許容できない。ただし、以下の機能が言う返すライン上のエラーを示して?

ここでは、チュートリアルのコードを示します。このコードは、IndexPath型の代わりにInt型を使用するものです。

import Foundation 


class ItemManager { 

    var toDoCount: Int = 0 

    var doneCount: Int = 0 

    private var toDoItems: [ToDoItem] = [] 

    func add(_ item: ToDoItem) { 

     toDoCount += 1 

     toDoItems.append(item) 
    } 


    func item(at index: Int) -> ToDoItem { 

     return toDoItems[index] 

    } 
} 

答えて

3

subscriptIntを期待して、あなたはタイプIntではないIndexPathを渡しているので。

あなたはApple IndexPath Documentationを見てみると、IndexPathはタイプIntであるrowまたはsectionのような特性を有しています。それらを使用すると、配列の要素にアクセスできます。

func item(at indexIWant: IndexPath) -> ToDoItem { 
    return toDoItems[indexIWant.row] 
} 

実際にIndexPathの配列にアクセスする場合は、Arrayクラスを拡張できます。今あなたのコードがコンパイルされますが、私はこのコードを推奨するかどうかはわかりません。

extension Array { 
    subscript(indexPath: IndexPath) -> Element { 
     get { 
      return self[indexPath.row] 
     } 
     set { 
      self[indexPath.row] = newValue 
     } 
    } 
} 
1

NSIndexPathクラスのでrowがアレイnの指数であり、section

enter image description here

ネストされた配列のコレクションのツリー内の特定のノードへのパスを表します配列の番号 したがって、最初の矢印はrow 1とsection 0,row 4とsection 1.から来ていますに。

Doc

関連する問題