BLACK FRIDAY SALE: Save big on all my Swift books and bundles! >>

New ShareLink with custom type is not working

Forums > SwiftUI

Hi everyone!

I want to share audio files with the new ShareLink in SwiftUI. I've a Recording entity from Core Data, witch store the URL from the audio file and the file itself is store in the FileManger. I already make Recording to conform Transferable protocol.

But in the line of the Sharelink appears an error compiler: "No exact matches in call to initializer".

Here is the code:

Recording entity:

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

View:

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

Any idea? I have tried to simplify the code so let me know if I have forgotten something. Thanks!

   

Hacking with Swift is sponsored by RevenueCat

SPONSORED In-app subscriptions are a pain to implement, hard to test, and full of edge cases. RevenueCat makes it straightforward and reliable so you can get back to building your app. Oh, and it's free if your app makes less than $10k/mo.

Learn more

Sponsor Hacking with Swift and reach the world's largest Swift community!

Reply to this topic…

You need to create an account or log in to reply.

All interactions here are governed by our code of conduct.

 
Unknown user

You are not logged in

Log in or create account
 

Link copied to your pasteboard.