【问题标题】:SwiftUI Preview MPMediaItemArtworkSwiftUI 预览 MPMediaItemArtwork
【发布时间】:2019-12-03 21:23:21
【问题描述】:

我有一个基于结构的数组,其中包括歌曲标题和艺术家作为字符串,其艺术作品作为类型MPMediaItemArtwork。为了让预览在Swift UI 中工作,我参考了

struct TrackRow_Previews: PreviewProvider {
    static var previews: some View {
        TrackRow(track: Track(name: "Track 1", artist: "Artist 1", artwork: [MPMediaItemArtwork]))
    }
}

当我注释掉预览时,视图工作正常,因此我能够将选定的MPMediaItemArtwork 打印到控制台,即MPConcreteMediaItemArtwork: 0x281efb890。但它也不接受。我可以为预览图稿添加什么价值以使预览提供程序正常工作?

额外细节:

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()
            }
        }
    }

【问题讨论】:

  • 我们能看看artworkMPMediaItemArtwork 长什么样子吗?
  • 刚刚添加了数组结构的详细信息,以及我如何填充它

标签: swiftui


【解决方案1】:

我的问题是我没有导入 MediaPlayer,因为视图不需要它,但显然预览视图需要它。有效的代码如下:

struct TrackRow_Previews: PreviewProvider {
    static var previews: some View {
        TrackRow(track: Track(name: "Track 1", artist: "Artist 1", artwork:MPMediaItemArtwork(image: UIImage(imageLiteralResourceName: "Artwork"))))
    }
}

【讨论】:

    【解决方案2】:

    我将假设 artworkMPMediaItemArtwork 的数组,因此对于预览,我只需抓取数组中的第一项,如下所示:

    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]]))
        }
    }
    

    【讨论】:

    • 它不是它自己的数组,而是上面定义的数组的一部分。此外,在应用程序正常运行并从 iOS 设备获取音乐之前,该数组为空
    猜你喜欢
    • 2021-06-28
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多