来自数据的 SwiftUI 图像

Luk*_*ice 12 swift swiftui

我正在制作一个多平台 SwiftUI 应用程序,它从 .mp3 文件加载歌曲插图

let playerItem = AVPlayerItem(url: fileURL)
let metadataList = playerItem.asset.metadata
for item in metadataList {
    guard let key = item.commonKey, let value = item.value else {
        continue
    }

    switch key {
    case .commonKeyArtwork where value is Data :
        let songArtwork = UIImage(data: value as! Data)!
    default:
        continue                    
    }
}
Run Code Online (Sandbox Code Playgroud)

我还可以通过使用获取数据

let interpretedMP3 = AVAsset(url: fileURL)
Run Code Online (Sandbox Code Playgroud)

以及其中的元数据。

这对于 ios 使用来说效果很好,UIImage(data: value as! Data)!但是 macos 不支持 uiimage 那么我应该如何从这些数据中制作图像呢?

Asp*_*eri 17

可以制作一些依赖于平台的图像生成器,例如

func createImage(_ value: Data) -> Image {
#if canImport(UIKit)
    let songArtwork: UIImage = UIImage(data: value) ?? UIImage()
    return Image(uiImage: songArtwork)
#elseif canImport(AppKit)
    let songArtwork: NSImage = NSImage(data: value) ?? NSImage()
    return Image(nsImage: songArtwork)
#else
    return Image(systemImage: "some_default")
#endif
}
Run Code Online (Sandbox Code Playgroud)

*注意:实际上也可以使用#if os(iOS)etc,但Apple不建议直接检查操作系统,除非确实需要明确的平台知识,而是像上面那样检查API。