[SwiftUI macOS] ファイル選択ダイアログを開く

Updated
Nov 23, 2019 6:49 PM
Created
Nov 23, 2019 6:44 PM
Tags
SwiftUISwift
Keywords
Date

Stackoverflowの回答によると次のコードで開ける。

Button(action: {
    let panel = NSOpenPanel()
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        let result = panel.runModal()
        if result == .OK {
            self.selectedURL = panel.url
        }
    }
}) {
    Text("Select file")
}

Dispatchでdelayする理由がちょっとわからなかった。 一応、なしでも動いた。

macOSアプリが面白いなと思うところは、 runModal() がブロッキングメソッドであるということ。 ファイル選択パネルが表示されている間はアプリのスレッドは runModal() のところで停止したままとなる。

ちなみにそれを回避し、非同期で選択したい場合は begin メソッドがある。

選択されたファイルURLを取得するには NSOpenPanel.urlsNSOpenPanel.urlで取得する。