Reputation: 486
I've got an array based on a structure that includes song title and artist as strings, and its artwork as type MPMediaItemArtwork
. To get the preview to work in Swift
UI I refer to
struct TrackRow_Previews: PreviewProvider {
static var previews: some View {
TrackRow(track: Track(name: "Track 1", artist: "Artist 1", artwork: [MPMediaItemArtwork]))
}
}
The view works fine when I've commented out the preview, and I've therefore been able to print to the console a selected MPMediaItemArtwork
-- which is MPConcreteMediaItemArtwork: 0x281efb890
. But it doesn't accept that either. What value can I put in for the preview artwork to make the preview provider work?
Extra Details:
struct Track: Hashable {
var name: String
var artist: String
var artwork: MPMediaItemArtwork
}
func getTracks(chosenPlaylist: String) {
trackArray = []
for playlist in playlists! {
if (playlist.value(forProperty: MPMediaPlaylistPropertyName)as! String) == chosenPlaylist {
let songs = playlist.items
for song in songs {
if song.artwork != nil {
trackArray.append(Track(name: (song.value(forProperty: MPMediaItemPropertyTitle) as! String), artist:(song.value(forProperty: MPMediaItemPropertyArtist) as! String), artwork: song.artwork!))
}
}
sortArray()
}
}
}
Upvotes: 1
Views: 399
Reputation: 486
My issue was that I hadn't imported MediaPlayer, as I hadn't needed it for the view, but obviously did for preview view. The code that works is as follows:
struct TrackRow_Previews: PreviewProvider {
static var previews: some View {
TrackRow(track: Track(name: "Track 1", artist: "Artist 1", artwork:MPMediaItemArtwork(image: UIImage(imageLiteralResourceName: "Artwork"))))
}
}
Upvotes: 1
Reputation: 27224
I'm going to assume artwork
is an array of MPMediaItemArtwork
so for the preview I would just grab the first item in the array like the following:
struct MPMediaItemArtwork {
var name: String
}
struct Track {
var name: String
var artist: String
var artwork: [MPMediaItemArtwork]
}
struct ContentView_Previews: PreviewProvider {
static var artwork = MPMediaItemArtwork(name: "0x281efb890")
static var mediaArray: [MPMediaItemArtwork] = [artwork]
static var previews: some View {
TrackRow(track: Track(name: "Track 1", artist: "Artist 1", artwork: [mediaArray[0]]))
}
}
Upvotes: 0