在花了太多时间之后,我无法弄清楚为什么该expirationDate
选项setItems(_:options:)
不适用于该功能的后续使用。没有关于此的任何其他文档。要么这是一个我无法弄清楚的基本琐碎问题,要么是 API 更复杂的问题。
无论如何,我已经使用 Timer 实现了这个解决方案。这适用于所有 iOS 版本,我们只是在 30 秒后清除 UIPasteboard 的 items 数组。该expirationDate
选项仅适用于 iOS 10.3 及更高版本,而此功能更强大,适用于所有版本。
class MyPasteboard {
private static let shared = MyPasteboard()
private let pasteboard = UIPasteboard.general
private var expirationTimer: Timer?
private init() {}
static func copyText(_ text: String, expirationTime: TimeInterval = 30) {
shared.pasteboard.string = text
shared.expirationTimer?.invalidate()
shared.expirationTimer = Timer.scheduledTimer(
timeInterval: expirationTime,
target: self,
selector: #selector(expireText),
userInfo: nil,
repeats: false
)
}
@objc private static func expireText() {
shared.expirationTimer = nil
shared.pasteboard.items = []
}
}
有许多不同的方法来构建它,但我选择这样做,因为它允许我抽象出 UIPasteboard 复制功能并通过我需要的静态函数进行简单使用。