SwiftUI:多平台 iOS/MacOS 的图像

Man*_*ero 2 swiftui xcode12

目标:多平台 iOS/MacOS 上的 SwiftUI 图像

问题:加载图像时我需要包装到 UIImage 中,并且它在 macOS 上不起作用

问题:加载多平台图像有何价值?

var body: some View {

            Image(uiImage: UIImage(data: image ?? self.image)!)

    }
Run Code Online (Sandbox Code Playgroud)

jn_*_*pdx 5

添加仅适用于您的 macOS 目标的帮助程序文件,其中包括:

typealias UIImage = NSImage

extension Image {
  init(uiImage: UIImage) {
        self.init(nsImage: uiImage)
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法有一些限制,因为UIImageNSImage不共享所有相同的方法和初始值设定项,但它适用于基本情况,例如您在问题中提到的情况 ( init(data: ))

一个更安全的版本(如果您愿意重写一些 UIImage init)可能是创建一个自定义类型,例如MyImage在 macOS 上别名为 NSImage ,在 iOS 上别名为 UIImage 。这样,您至少会在代码中提醒您实际上并不是UIImage在 macOS 上调用。