###前提・実現したいこと
以下のコードで、MPMediaQuery
からアーティストを取り出して、テーブルビューに入れているのですが、このように、同じアーティストを曲の数だけ繰り返してしまうのです・・・
コードは、
swift
1func getArtistInfo() -> Array<MPMediaItem> { 2 var array = Array<MPMediaItem>() 3 let artistQuery: MPMediaQuery = MPMediaQuery.artists() 4 let artistCollections: [MPMediaItemCollection] = artistQuery.collections! 5 for artist in artistCollections { 6 let artistItems: [MPMediaItem] = artist.items 7 for artists in artistItems { 8 array.append(artists) 9 } 10 } 11 return array 12 } 13//これで取得して、 14 15 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 16 return data.count 17 } 18 19 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 20 let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "myCell") 21 cell.textLabel?.text = data[indexPath.row].artist 22 return cell 23 } 24//これでテーブルに入れています。
###試したこと
クエリ周りの記述は本を見て丸写ししたものをちょっとアレンジをしただけなので、
あまり理解が進んでいません・・・
MediaQuery
が曲ごとに各.artists()
やら.albums()
を参照しているからなのだろうとは思うのですが、OrderedSet
などで重複を削除しようにも、どうしたらいいのか・・・
###補足情報(言語/FW/ツール等のバージョンなど)
Xcode8 swift3
###追記 2017.12.6
階層の解釈として、
MPMediaQuery
↓
.artists()
← アーティストで分けますというメソッド
↓
.collections
← 各アーティストがどのような曲(items)を持っているのかという情報
↓
.items
← 各曲の詳細を内包した情報
↓
.artist
など ←各曲の情報
これであっているでしょうか?
つまり、上記コードでは
アーティストの数だけfor文が回されているだけでなく、曲の数だけfor文が回されるのがアーティストの数だけ繰り返されていた
ということですかね?

回答1件
あなたの回答
tips
プレビュー