共有したいこと
インフラエンジニアである自分がコピペで楽したいのでmacOSアプリを自作したのですが、その際にクリップボードへ文字列を格納する際に解決した点を共有します。
具体的に
- macOSのクリップボードを操作するClassであるNSPasteboardにはfunc setStringがあることを確認。
- よーし、setStringでstringをsetしちゃうぞ、ということで
NSPasteboard.general.setString(anyString, forType: NSPasteboard.PasteboardType.string)
なイメージで実装。 - Boolを返すそうな、ということで
print(NSPasteboard.general.setString(anyString, forType: NSPasteboard.PasteboardType.string))
なイメージで実装アップデート。ブレイクポイントも設定したけど。 - 実行!
- 結果falseが返る・・・。func setStringによると*otherwise false if ownership of the pasteboard has changed.*とのこと。
- うん。分からん!(ダメ人間)
- クリップボードにsetできない理由って何だろう・・・妄想しつつNSPasteboardを眺めてみる。
- んー、func clearContents()ってある。中身をクリアしてからsetしたら動くかなという直感。
-
NSPasteboard.general.clearContents()
してからprint(NSPasteboard.general.setString(anyString, forType: NSPasteboard.PasteboardType.string))
な感じで実装。 - 実行!
- 結果trueが返る!幸せ。
- 改めてfunc clearContents()を読んでみるとDiscussionに、*Clears the existing contents of the pasteboard, preparing it for new contents. This is the first step in providing data on the pasteboard.*って、ちゃんと書いてある。
- 結論、公式のドキュメントはよく読めと・・・。