Aller au contenu
Skip

Pasteboard

Ce contenu n’est pas encore disponible dans votre langue.

Skip support for SwiftUI Clipboard.

The following example screens and source code is from SkipUI’s Showcase sample app PasteboardPlayground.swift

import SwiftUI
#if os(macOS)
struct PasteboardPlayground: View {
var body: some View {
Text("UIPasteboard is not available on macOS")
}
}
#else
struct PasteboardPlayground: View {
@State var pasteboardInfo = PasteboardInfo(UIPasteboard.general)
@State var text = ""
var body: some View {
ScrollView {
VStack(spacing: 16) {
HStack {
TextField("Text / URL", text: $text)
Spacer()
Button("Copy") {
if let url = URL(string: text) {
UIPasteboard.general.url = url
} else {
UIPasteboard.general.string = text
}
}
}
Divider()
HStack {
Text("Pasteboard count:")
Spacer()
Text(String(describing: pasteboardInfo.numberOfItems))
}
HStack {
Text("Has strings:")
Spacer()
Text(String(describing: pasteboardInfo.hasStrings))
}
HStack {
Text("Strings:")
Spacer()
Text("\(pasteboardInfo.strings == nil ? "nil" : pasteboardInfo.strings!.description)")
}
HStack {
Text("Has URLs:")
Spacer()
Text(String(describing: pasteboardInfo.hasURLs))
}
HStack {
Text("URLs:")
Spacer()
Text("\(pasteboardInfo.urls == nil ? "nil" : pasteboardInfo.urls!.description)")
}
}
.padding()
}
.onReceive(NotificationCenter.default.publisher(for: UIPasteboard.changedNotification), perform: { notification in
pasteboardInfo = PasteboardInfo(notification.object as! UIPasteboard)
})
.toolbar {
PlaygroundSourceLink(file: "PasteboardPlayground.swift")
}
}
}
struct PasteboardInfo {
let numberOfItems: Int
let hasStrings: Bool
let strings: [String]?
let hasURLs: Bool
let urls: [URL]?
init(_ pasteboard: UIPasteboard) {
self.numberOfItems = pasteboard.numberOfItems
self.hasStrings = pasteboard.hasStrings
self.strings = pasteboard.strings
self.hasURLs = pasteboard.hasURLs
self.urls = pasteboard.urls
}
}
#endif