SwiftUI MacOS pasteboard 的使用

25 min read

在SwiftUI中,你可以使用NSPasteboard来访问Mac上的剪贴板。以下是一个演示如何在SwiftUI中使用NSPasteboard的示例:

首先,你需要导入AppKit框架:

import AppKit

接下来,创建一个NSPasteboard实例,并将其存储在一个@State中:

@State private var pasteboard = NSPasteboard.general

然后,你可以在视图中使用onAppear modifier来读取剪贴板的内容,然后在视图中显示它:

Text(pasteboard.string(forType: .string) ?? "Nothing in pasteboard")
   .onAppear {
       // 读取剪贴板的内容
       pasteboard = NSPasteboard.general
   }

你还可以使用onTapGesture modifier来将视图的内容复制到剪贴板:

Text("Copy to Pasteboard")
   .onTapGesture {
       pasteboard.declareTypes([.string], owner: nil)
       pasteboard.setString("Text to be copied", forType: .string)
   }

这是一个完整的示例,展示了如何在视图中读取剪贴板的内容,并将视图的内容复制到剪贴板:

import SwiftUI
import AppKit

struct ContentView: View {
   @State private var pasteboard = NSPasteboard.general

   var body: some View {
       VStack {
           Text(pasteboard.string(forType: .string) ?? "Nothing in pasteboard")
               .onAppear {
                   pasteboard = NSPasteboard.general
               }
           
           Text("Copy to Pasteboard")
               .onTapGesture {
                   pasteboard.declareTypes([.string], owner: nil)
                   pasteboard.setString("Text to be copied", forType: .string)
               }
       }
   }
}

struct ContentView_Previews: PreviewProvider {
   static var previews: some View {
       ContentView()
   }
}

现在,当你运行这个示例时,你会看到剪贴板的内容显示在视图中。同时,当你点击"Copy to Pasteboard"文本时,它的内容将被复制到剪贴板中。