Pasteboard
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