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

如何将多个URL复制到剪贴板?Swift粘贴板问题排查

解决macOS/iOS下复制URL数组到剪贴板的问题

问题分析

你遇到的核心问题是对NSPasteboard方法的使用逻辑有误:

  • 直接调用writeObjects(urls as [NSURL]):剪贴板会将多个URL打包成一个“多重URL”项目,多数应用不支持这种格式,只会读取第一个URL。
  • 循环调用writeObjects([url]):每次调用都会替换剪贴板的全部内容,最终仅保留最后一个URL(你看到的“只复制第一个”大概率是测试时的误操作)。
  • 转字符串写入:仅会被识别为纯文本,无法被其他应用解析为URL类型。

正确实现代码

要将多个URL作为独立项目复制到剪贴板,需使用addObjects方法添加内容,而非writeObjects:

let urls = [URL(string: "https://www.apple.com")!, URL(string: "https://www.microsoft.com")!]

// 先清空剪贴板
NSPasteboard.general.clearContents()
// 将所有URL作为独立项目添加到剪贴板
NSPasteboard.general.addObjects(urls as [NSURL])

或者逐个添加(效果一致):

let urls = [URL(string: "https://www.apple.com")!, URL(string: "https://www.microsoft.com")!]

NSPasteboard.general.clearContents()
for url in urls {
    NSPasteboard.general.addObjects([url as NSURL])
}

关键说明

  • clearContents():清空剪贴板现有内容,确保新添加的URL不会和旧内容混淆。
  • addObjects(_:):在剪贴板中追加新的项目,而非替换全部内容,这样多个URL会被独立保存。
  • 无需调用prepareForNewContents(),clearContents()已经完成了剪贴板的状态重置。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:13:09