在macOS上使用Swift 3从剪贴板中读取

Joh*_*ohn 6 macos nspasteboard swift swift3

我是Swift的初学者,我正在试图弄清楚如何在macOS(Swift 3)上阅读已复制到剪贴板的内容?我经常搜索,但似乎找不到任何有用的东西.

我在网上试过的一些事情:

var pasteboardItems: [NSPasteboardItem]? { get }
print("\(pasteboardItems)")
Run Code Online (Sandbox Code Playgroud)

let pb = NSPasteboard.general()
pb.string(forType: NSPasteboardTypeString)

print("\(pb)")
Run Code Online (Sandbox Code Playgroud)

let pasteboard = UIPasteboard.general
if let string = pasteboard.string {
    // text was found and placed in the "string" constant
}
Run Code Online (Sandbox Code Playgroud)

最后

func paste(sender: AnyObject?) {

    let pasteboard = NSPasteboard.generalPasteboard()

    if let nofElements = pasteboard.pasteboardItems?.count {

        if nofElements > 0 {


            // Assume they are strings

            var strArr: Array<String> = []
            for element in pasteboard.pasteboardItems! {
                if let str = element.stringForType("public.utf8-plain-text") {
                    strArr.append(str)
                }
            }


            // Exit if no string was read

            if strArr.count == 0 { return }


            // Perform the paste operation

            dataSource.cmdPaste(strArr)
       }
    }        
}
Run Code Online (Sandbox Code Playgroud)

ron*_*ory 18

适用于Swift 3Swift 4

// Set string to clipboard
let pasteboard = NSPasteboard.general
pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)
pasteboard.setString("Good Morning", forType: NSPasteboard.PasteboardType.string)

var clipboardItems: [String] = []
for element in pasteboard.pasteboardItems! {
    if let str = element.string(forType: NSPasteboard.PasteboardType(rawValue: "public.utf8-plain-text")) {
        clipboardItems.append(str)
    }
}

// Access the item in the clipboard
let firstClipboardItem = clipboardItems[0] // Good Morning
Run Code Online (Sandbox Code Playgroud)


Kor*_*and 6

另一个 Swift 4 解决方案

// Write to pasteboard
let pasteboard = NSPasteboard.general
pasteboard.declareTypes([NSPasteboard.PasteboardType.string], owner: nil)
pasteboard.setString("Good Morning", forType: NSPasteboard.PasteboardType.string)

// Read from pasteboard
let read = pasteboard.pasteboardItems?.first?.string(forType: .string)
Run Code Online (Sandbox Code Playgroud)


Lim*_*Red 5

时代变了.在Swift 3+中你会这样做:(如果你只对字符串感兴趣)

func clipboardContent() -> String?
{
    return NSPasteboard.general.pasteboardItems?.first?.string(forType: .string)
}
Run Code Online (Sandbox Code Playgroud)

  • 至少在 Swift 5 中,不需要 `.pasteboardItems?.first?`,这有效:`NSPasteboard.general.string(forType: .string)`。 (3认同)