Swiftでカスタム配列を作る

配列をラッピングしてメソッドを追加したい場合、Collectionを継承したstructを作るのがよさげ。

class Hoge {
   var name: String
   
   init(name: String) {
       self.name = name
   }
}

struct HogeArray<Hoge>: Collection {
   let array = [Hoge]()
   var startIndex: Int { return 0 }
   var endIndex: Int   { return array.count }
   
   subscript(index: Int) -> Hoge {
       return array[index]
   }
   
   func index(after i: Int) -> Int {
       precondition(i < endIndex, "Can't advance beyond endIndex")
       return i + 1
   }
}

これでindex指定で要素を取得できる。

var hoge = hoges[1]

for文を要素を取得することも出来る。

var hoges = [Hoge]()
hoges.append(Hoge(name: "01"))
hoges.append(Hoge(name: "02"))
hoges.append(Hoge(name: "03"))
for hoge in hoges {
    print(hoge.name)
}

参考
https://developer.apple.com/documentation/swift/indexingiterator