2017-01-03 6 views
1

Я начинаю с Swift, и я пытаюсь выяснить, как я могу прочитать то, что было скопировано в буфер обмена. На macOS (Swift 3)? Я много искал, но не мог найти ничего, что сработает.Чтение из буфера обмена с Swift 3 на macOS

Некоторые из вещей, которые я попробовал от онлайн:

var pasteboardItems: [NSPasteboardItem]? { get } 
print("\(pasteboardItems)") 

и

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

print("\(pb)") 

и

let pasteboard = UIPasteboard.general 
if let string = pasteboard.string { 
    // text was found and placed in the "string" constant 
} 

и, наконец,

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) 
     } 
    }   
} 
+1

Ваш второй код является единственной попыткой в ​​правильном направлении. Третий - для iOS. Четвертый - Свифт 2. Первый не имеет смысла. – rmaddy

ответ

6

Работы для Swift 3 и Swift 4

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

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

// Access the item in the clipboard 
let firstClipboardItem = clipboardItems[0] // Good Morning 
+0

Большое вам спасибо! Он работает чудесно! – John

+0

Да, рад, что я мог вам помочь! – ronatory

1

Времена изменились. В Swift 3+ вы сделали бы это следующим образом: (если вас интересуют только строки)

func clipboardContent() -> String? 
{ 
    return NSPasteboard.general.pasteboardItems?.first?.string(forType: .string) 
}