Swift MusicKitプログラミング その8
Swift MusicKitプログラミング その8
with(_:)
MusicCatalogSearchRequestでArtistを取得。
しかし、albums/fullAlbums/liveAlbums/singles/playlistsがnilで取得出来ていない。
with(_:)使用して取得する必要があります。
typesは複数指定可能です。
Home Pageより
指定されたプロパティを含むミュージックアイテムの新しいインスタンスをロードする。
Task() {
print("\nExample 8 --------------------")
let request = MusicCatalogSearchRequest(term: "氷室京介", types: [Artist.self])
print(request.term.debugDescription)
let response = try await request.response()
if let artist = response.artists.first {
print("artist:\(artist.fullAlbums?.count)")
let withArtist = try await artist.with([.fullAlbums])
print("withArtist: \(withArtist.fullAlbums?.count)")
}
}
"氷室京介" artist:nil withArtist: Optional(10)
with(_:)取得対象
PartialMusicPropertyのドキュメントで確認出来ます。
上記コードの場合、
static let fullAlbums: MusicRelationshipProperty
An identifier for the association property that returns a collection of the artist’s full-release albums.
Available when Root is Artist.
になります。
注意点
with(_:)も一度で全ては取得出来ない。
「氷室京介」「.fullAlbums」は全13アルバムありますが、上記コードで取得出来た数は10です。
Swift MusicKitプログラミング その7の方法(nextBatch(limit:))で取得する必要があります。
疑問
with(_:)にはLimitがありません。
では、一度にいくつ取得出来るのか?疑問になります。
試してみました。
下記の場合、liveAlbumsとplaylistsは少ないので考察から除外。
albums:25で続きあり
fullalbums:10で続きあり
singles:10で続きあり
不思議なことにalbumsは25なのに、他は10なので。
他のArtistでやってみましたが、結果は同じでした。
不思議な仕様です。
Apple Music APIの仕様なのかもしれませんが、確認出来ていません。
Task() {
print("\nExample 7 --------------------")
let request = MusicCatalogSearchRequest(term: "氷室京介", types: [Artist.self])
print(request.term.debugDescription)
let response = try await request.response()
if let artist = response.artists.first {
let withArtist = try await artist.with([.albums, .fullAlbums, .liveAlbums, .singles, .playlists])
print("albums")
print(withArtist.albums?.count)
print(withArtist.albums?.hasNextBatch)
print("fullAlbums")
print(withArtist.fullAlbums?.count)
print(withArtist.fullAlbums?.hasNextBatch)
print("liveAlbums")
print(withArtist.liveAlbums?.count)
print(withArtist.liveAlbums?.hasNextBatch)
print("singles")
print(withArtist.singles?.count)
print(withArtist.singles?.hasNextBatch)
print("playlists")
print(withArtist.playlists?.count)
print(withArtist.playlists?.hasNextBatch)
}
}
albums Optional(25) Optional(true) fullAlbums Optional(10) Optional(true) liveAlbums Optional(2) Optional(false) singles Optional(10) Optional(true) playlists Optional(3) Optional(false)





