繁体   English   中英

自定义类型的 ShareLink 不起作用

[英]ShareLink with custom type is not working

我想与 SwiftUI 中的新ShareLink共享音频文件。我有一个来自 Core Data 的录音实体,从音频文件中存储 URL,文件本身存储在 FileManger 中。 我已经制作了 Recording 以符合 Transferable 协议。

但是在 Sharelink 的行中出现了一个错误编译器:“在对初始化程序的调用中没有完全匹配”。

这是代码:

备案单位:

extension Recording {

    @nonobjc public class func fetchRequest() -> NSFetchRequest<Recording> {
        return NSFetchRequest<Recording>(entityName: "Recording")
    }

    @NSManaged public var date: Date
    @NSManaged public var id: UUID
    @NSManaged public var url: String
    @NSManaged public var title: String
   
}

extension Recording : Identifiable, Transferable {
    // Transferable protocol
    static var containerUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)

    public static var transferRepresentation: some TransferRepresentation {
        FileRepresentation(exportedContentType: .audio) { audio in
            SentTransferredFile(URL(string: audio.url)!)
        }
    }
}

看法:

struct AudioPlayerView: View {

@ObservedObject var recording: Recording

  var body: some View {
        NavigationStack {
            VStack(spacing: 20){
                
                VStack {
                    Text(recording.title)
                        .font(.title)
                        .bold()
                    Text("\(recording.date, format: .dateTime)")
                        .foregroundColor(.secondary)
                }
             }
        }
     .toolbar {
           ToolbarItem(placement: .navigationBarLeading) {
               ShareLink(item: recording) { // This line gives the error: No exact matches in call to initializer 
                   Image(systemName: "square.and.arrow.up")
               }
           }
   }

任何的想法? 我试图简化代码,所以如果我忘记了什么,请告诉我。

有许多 ShareLink 初始化程序,但并非所有排列都已实现

您的初始化程序代码与“共享项目”、“共享带标签的项目”和“共享带预览的项目”下列出的代码类似,但并不完全匹配。

您需要完全匹配文档要求的内容才能编译。

一种选择是添加preview:源自对象的数据。

ShareLink(item: recording, preview: SharePreview(Text(recording.title))) { 
    Image(systemName: "square.and.arrow.up")
}

否则,如果有 Label(并且没有 SharePreview), item:必须是 String 或 URL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM