質問: "クリップボードは空" } } ```
回答: 残念ながら、`NSPasteboard`については、 * 変化の通知は行わない * 変化を伝えるようなdelegateも持たない * 監視対象にできるようなプロパティもない と言うことで、自分でポーリングしてやる(定期的に変化がないか見に行く)しかないようです。 本家Stack Overflowの質問に、Swiftで書かれた監視用クラスのコードを掲載している方がおられたのでご紹介しておきます。(単に`NSTimer`を使って、定期的に`NSPasteboard`の状態に変化がないかを確認しているだけです。) Swift2.2では警告が出るコードになっているのと、特定拡張子を持つファイルURLが書き込まれた時だけdelegateメソッドを呼ぶようになっているのですが、そこらへんは自分で研究してご自身の要求に合うように書き換えてみてください。(記事では一部delegate用プロトコルの宣言が抜けていますが、リンク先のソースを当たってください。) 使い方はこんな感じになるようです。 ``` //適当なクラス(普通ならAppDelegateかViewController)を`PasteboardWatcherDelegate`に適合させておく class MyClass: PasteboardWatcherDelegate/*,...*/ { //監視オブジェクトは監視したい間ずっと保持しないといけない private var watcher: PasteboardWatcher! //初期化用メソッドの中で func myMethod() { watcher = PasteboardWatcher(fileKinds: ["png", "jpg"]) //このままでは循環参照ができるので、元ソースの`var delegate: PasteboardWatcherDelegate?`を //`weak var delegate: PasteboardWatcherDelegate?`に書き換えておいてください。 watcher.delegate = self } //`PasteboardWatcherDelegate`メソッドの実装 func newlyCopiedUrlObtained(copiedUrl copiedUrl: NSURL) { //ファイルURLとなる文字列が指定の拡張子を持っているとこのメソッドが呼ばれる print(copiedUrl) } } ``` 申し訳ありませんが、どの程度使い物になるか、私自身は試していません。(上に書いた以外にも若干修正が要るかもしれません。)紹介した記事の質問が書かれたのは5年以上も前なのに、いまだにAppleが動いていないところを見ると、システム全体で共用するリソースであるはずのクリップボードの内容を、特定アプリが簡単に監視して独占してしまうのが嫌なのかもしれません。