我对Swift和iOS开发非常陌生,我遇到了一个我应该预料到的绊脚石……

我已经实现了一个名为Media的类,它可以包含DataUrl,这取决于它包含的媒体类型--目前这是音频和照片,但也将包括视频.

我设法让它允许音频共享没有问题,但当我实现图像共享时,我意识到transferRepresentation的实现是static,所以我无法有条件地指定格式或它是否使用我设置的DataUrl属性.

所以问题是,这是可能的吗,或者我需要将我的媒体类型划分为不同的类别才能实现这一点?

以下是课程的一部分,以展示我所做的工作.这是我需要somehow更新的transferRepresentation实现

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

这是我到目前为止的设置,所以寻找任何可能的选项,或者如果我需要修改我的类的设置方式,所以它不会使用Media类作为一个包罗万象的类

推荐答案

尽管transferRepresentation属性是静态的,但您在其中调用的几乎所有内容都将提供一个闭包,该闭包为您提供Transferable项的一个实例,就像FileRepresentation的初始化器一样,还有exportingCondition--使表示具有条件的专用方法.

FileRepresentation(exportedContentType: .wav) { audio in
    SentTransferredFile(...)
}
.exportingCondition { media in media.url != nil }

附注:考虑使用init(string:relativeTo:)创建文件的URL.

Ios相关问答推荐

当包含UITextView的inputAccessoryView显示键盘时,iOS UITableView内容会出现UINavigationBar奇怪的错误

如何解释在SwiftUI视图中观察到持续的数据更改

如何在iOS中以编程方式推送另一个页面?

设置托管在DigitalOcean上的iOS通用链接

Xcode -Google Mobile Ads SDK在没有AppMeasurement的情况下初始化

Flutter 翼项目.升级到XCode 15.0.1`pod install`抛出错误FlutterMacOS.podspec.json 3.13.2的ParserError

如何使用Swift以编程方式更改SVG文件中某些元素的 colored颜色

如何在后台显示 Swift UI 中的通讯通知?

快速 keys 串更新只有在第二次try 时才起作用

如何结合`@dynamicMemberLookup`和`ExpressibleByStringInterpolation`来实现方法链?

多协议和类继承混乱,Swift

创建方案时运行 pod install 时出错

应用程序被杀死时如何在 flutter ios 应用程序中播放音频?

具有线性渐变的 SVG textPath 在 Safari 中损坏

react 在 android 上运行的本机应用程序,但在 iOS 上出现问题,详细信息在描述中共享

如何使用 swift 显示 .svg 图像

如何以编程方式切换 UISegmentedControl?

有没有办法在应用store 之外分发 ios 应用程序?

如果我的分发证书过期会怎样?

更新字段时,UITextField值已更改未触发