I'm pretty new to Swift and iOS development, and have hit a stumbling block that I should have seen coming...
I've implemented a class called Media, which can contain Data or a Url, depending on the type of media that it contains - at the moment this is audio and photo, but will include video as well.
I've managed to get it to allow sharing of audio no problem, but as I went to implement sharing for images, I realised that the implementation of transferRepresentation is static, so I have no way of conditionally specifying the format or whether it uses the Data or Url properties I have set.
So the question is, is this even possible, or will I need to split my media types into different classes to allow this to work?
Here is a section of the class to show what I've done. It's the transferRepresentation implementation that I need to somehow update
@Model
class Media: Transferable {
@Attribute(.externalStorage) var file: Data? = nil
var url: String? = nil
public static var transferRepresentation: some TransferRepresentation {
FileRepresentation(exportedContentType: .wav) { audio in
SentTransferredFile(URL(string: "\(AudioHelper.getDocumentsDirectory())\(audio.url!)")!)
}
}
}
This is my setup so far, so looking for any possible options, or if I need to rework how my classes are setup, so it's not using the Media class as a catch-all
Although the
transferRepresentationproperty is static, almost everything you call in there will provide a closure that gives you an instance of yourTransferableitem, like the initialiser forFileRepresentation, and alsoexportingCondition- the dedicated method for making a representation conditional.Side note: Consider creating the URL for the file using
init(string:relativeTo:).