解放区在住氷翠 緑の閃光
【解放区在住氷翠】デスクトップアプリケーション

【Swiftui】ファイルをドロップしたい

2023-06-01

こんばんは、氷翠です。

今回は仕事上、出来るだけ早めに作業をすませるため、いろんな動作をちょっとでも楽にするため、ファイルのドラッグ&ドロップを実装する例を作ってみました。

これが予想外に簡単に実装できるということがわかりました。

中身に関しては本当に簡単なので、メインになっている部分だけをご紹介。

struct ContentView: View {
    
    // テキストエディタの変数
    @State var te : String = ""
    
    var body: some View {
        VStack {
            Text("ここにファイルをドロップしてください")
                .border(.yellow)
                .padding()
            // テキストエディタ内にはドロップできないようだ。
            TextEditor(text: $te)
        }
        .padding()
        .dropDestination(for: URL.self) { items, location in
            // itemsの中にURLがあるので、これをforeachにかける
            items.forEach { p in
                // p.absoluteStringだとフルパスになる
                // 今回はファイル名だけを取り出したいので、lastPathComponent
                // を使って取り出す
                let u = p.lastPathComponent
                // テキストエディタに出力する
                self.te += u + "\n"
            }
            return true
        }
    }
}

「.dropDestination」この部分を追加するだけ。

ただ、「TextEditor」にこれをつけても動作せず、そこにファイルをドロップしてもファイルがフルパスになってしまう。もうターミナルにドラッグした時のような感じになる。

氷翠はよく、ファイルのフルパスを取得するためにターミナルにファイルを放り込んでいる。そこにフルパスで表示されるのですぐだ。

で、「items」の中には配列変数と同じ感じでURL型のデータが入っているので、foreachで一つずつ処理することができる。

非常に簡単なプログラムだったので、動画も5分程度と短いものになったのですが、これで作業がはかどる。

コメントを残す

メールアドレスが公開されることはありません。