Ah, thank you @aronskaya. That works.
It was a bit of a challenge to work out exactly what the compiler wanted, but for reference something like this:
/// A transferable that generates the image to be shared asynchronously. A preview
/// message, image and icon are provided here so they can be used to populate the
/// sharing UI, but they should not be generated asynchronously.
///
struct MyTransferable: some Transferable {
let renderer: Renderer
var message: String {
// TODO: Provide a real message string here.
//
return "Render"
}
var previewImage: Image {
// TODO: Provide a real preview image here.
//
return Image("previewImage")
}
var previewIcon: Image {
// TODO: Provide a real preview icon here.
//
return Image("previewIcon")
}
static var transferRepresentation: some TransferRepresentation {
DataRepresentation(exportedContentType: .png) { transferable in
return try await transferable.renderer.render()
}
}
}
/// A view for testing the sharing link.
///
struct MyView: View {
private var transferables: [MyTransferable] {
[MyTransferable(), MyTransferable()]
}
var body: some View {
ShareLink<[MyTransferable], Image, Image, DefaultShareLinkLabel>(items: transferables { transferable in
SharePreview(transferable.message, image: transferable.previewImage, icon: transferable.previewIcon)
}
}
}
Thanks again
Topic:
UI Frameworks
SubTopic:
SwiftUI
Tags: