解放区在住氷翠 緑の閃光
【解放区在住氷翠】氷翠のお気楽日記

SWIFTだよ〜

2018-02-20

ということで、こんばんは氷翠です。
もう、swift難しいです。
ファイルを開くだけなのに、こんなに苦労するなんてもってもみなかったー

これが結果として作ったものですがね。

上のテキストフィールドにファイル名が表示されていて、下にそのファイルの内容が表示されます。
そんな感じのテスト。
ということで、なんとか調べてやってみた。
理想的なのはファイルのダイアログを開いてファイルを選択した上で。ということでそのように。

「ViewController.swift」のファイルを開いて、「class ViewController」の中での作業。
まずは共通で使える変数を用意。といっても、ここでは上のフォームで使っているコンポーネントを変数化した上での話だ。
よって、

クラス名のある部分の直後に

@IBOutlet weak var tf: NSTextField!
@IBOutlet weak var tv: NSTextView!

この2つを宣言しておく。
ここはなんともわかりやすいことだ。
「@IBOutlet」はフォームと変数をつなげるものと考えよう。そして、weakはわからないがw
「var」はjavascriptでも変数を宣言するものとして扱っているので、ここでも変数として宣言しているのだろう。つまりは変化のできるものだ。
そのあとの「tf」とか「tv」というのが変数名だ。その後ろの語句はコンポーネントの種類ということだろう。

ということで、準備ができた。

ではフォームが表示される前にファイルを選択するダイアログを表示して、選択する方法をとってみる。

「override func viewDidLoad()」という関数があるので、この中でプログラムを記述していく。この関数はそういう関数らしい。

let openFileDialog = NSOpenPanel()
openFileDialog.canChooseDirectories = false
openFileDialog.canChooseFiles = true
openFileDialog.canCreateDirectories = false
openFileDialog.allowsMultipleSelection = false
if openFileDialog.runModal().rawValue == NSApplication.ModalResponse.OK.rawValue {
    if let fileURL = openFileDialog.url {
        tf.stringValue = fileURL.absoluteString
        print(fileURL.absoluteString + "にアクセスします")
        do {
            let fileContent:String = try String( contentsOf: fileURL, encoding: String.Encoding.shiftJIS )
            tv.textStorage?.append(NSAttributedString(string: String(fileContent)))
            print(fileContent)
        } catch {
            print(error)
        }
    }
}

とりあえず、全文。

1行目の「let」は定数を宣言するためのものらしい。で、しかもいきなりダイアログのコンポーネントを宣言しているようだ。定数名は「openFileDialog」いろいろと設定をしてあげて、if文のところでダイアログを開き、その結果で処理を行う。
結果が「NSApplication.ModalResponse.OK.rawValue」だったら処理という感じだ。
で、選択されたファイル名は「openFileDialog.url」という感じで代入されているので、「fileURL」という定数に代入してやる。
どうやら、ファイル名を含んだ文字列はURLとして扱われるようだ。
一応、print文でそれを文字列として出力してみたがw

その後はtry文で処理。内容の全てを一つの変数の中に代入するのだが、この時、文字コードを指定しておく。

で、テキストビューワで表示させるため、「tv.textStorage」に格納するのだが、ここでも文字列という概念ではないだろうか、文字列をstorageという属性に変換する必要があるようだ。

これで一連の流れが完了。

すごい長いよ…w

そして、まだまだ先は長い。

現在は、表組みであるTableViewをつかった処理をしている。
セルを一つ選択した時の処理。どうやってやるんだろうか?
未だよくわかていない。

コメントを残す

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