SwiftのIdentifiableプロトコルに準拠した構造体のコレクションの要素へのアクセス方法について教えて下さい。
以下のコードはコレクション内のアイテムのうち「アイテム2」とnameに設定されている要素を取得し出力しています。
struct Item: Identifiable { let id:UUID = UUID() var name:String } var items:[Item] = [] items = [ Item(name: "アイテム1"), Item(name: "アイテム2"), Item(name: "アイテム3"), Item(name: "アイテム4"), Item(name: "アイテム5") ] if let index = items.firstIndex(where: { $0.name == "アイテム2" }) { print(items[index].id) print(items[index].name) } else { print("Not Match.") }
これはfirstIndexにて条件に一致した要素のインデックスを取得し、そのインデックスを使って要素の情報を取得しています。
これはコレクションの要素へのアクセス方法として至って普通の方法ですが、そもそもIdentifiableプロトコルに準拠した構造体の配列なのですから、idは一意となっているわけで、だとすると雰囲気的には以下のようなアクセスが可能なのではないかと思っています。
if let index = items.firstIndex(where: { $0.name == "アイテム2" }) { var id = items[index].id print(items[id]) } else { print("Not Match.") }
当然ですがこれは動きません。
考えて見れば、Identifiableに準拠しているのはその構造体でありコレクション内の要素なのでコレクション自体からみればそれを添え字にしてアクセスできるわけがないのですが、なんというか、違和感を覚えます。
一意なのでそういった操作ができても良さそうなものなのですが、そんなものなのでしょうか。
回答1件
あなたの回答
tips
プレビュー