You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI中使用ShareLink实现适配短信与邮件的带URL链接格式化文本问题求助

SwiftUI中使用ShareLink实现适配短信与邮件的带URL链接格式化文本问题求助

大家好,我现在遇到一个SwiftUI ShareLink的使用问题,想请教下有没有可行的解决方案:

我想要用ShareLink让用户发送包含URL链接的格式化邮件或短信,目前我的实现代码如下:

ShareLink(
    item: itemText,
    subject: Text("Message from app user"),
    preview: SharePreview("Link", image: "AppIcon")
) {
    Label(message, systemImage: "square.and.arrow.up")
}

其中itemText是通过itemText(link: URL)方法生成的,我把相关的文本生成逻辑精简后如下:

func shareItemMessage(link: URL) -> String {
    return "Please join me on our app\n\n"
    + "Tap on [link](\(link)) to accept my invitation (link: \(link)).\n\n"
}

func itemText(link: URL) -> (some Transferable)? {
    // 仅iOS 16.1及以上版本,AttributedString才遵循Transferable协议
    if #available(iOS 16.1, *) {
        // 这里的Markdown解析选项是为了保留文本中的空格和换行格式
        return try? AttributedString(markdown: shareItemMessage(link: link),
            options: AttributedString.MarkdownParsingOptions(
                allowsExtendedAttributes: false,
                interpretedSyntax: .inlineOnlyPreservingWhitespace,
                failurePolicy: .returnPartiallyParsedIfPossible,
                languageCode: nil
            )
        )
    } else {
        return shareItemMessage(link: link)
    }
}

现在遇到了两个问题:

  • 当用户选择短信应用分享时,Markdown格式会被完全剥离,链接无法显示为可点击的样式
  • 当用户选择邮件应用分享时,会出现两个重复的链接(一个是Markdown解析后的可点击链接,一个是纯文本形式的URL)

我是在iOS 16.1以上的设备上测试的,所以两种场景都是用AttributedString来处理文本格式化的。

有没有哪位朋友遇到过类似的问题,或者有更好的实现方式,能让ShareLink发送的短信和邮件都能正确显示带单个可点击链接的格式化文本呢?

备注:内容来源于stack exchange,提问作者Chris Prince

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:38:12