Swiftの、というかFoundationクラスではテキストファイルの扱いが弱いように感じる。Stringクラスでのファイル読み込みは一括しかサポートしていなくてテキストストリームとして扱う手段を用意してくれていない。使用可能なメモリが増大した現代ではメモリサイズなんて気にせず、ファイルは全部メモリに読み込んでから処理すればいいじゃんっていう思想なのだろうか?所謂富豪プログラミング。

ただ、ネットワークデータとかターミナルでの行処理とか昔からのプログラミングになれている物としてはテキストストリームを行ごとに読み込んで処理するという考え方のほうがプログラムを作りやすい。どうしても一度に読み込めなかったらとかそういうことを考えてしまう。

探したら自作クラスを作成して公開している人がいた。



使い方も書いてくれている親切さ。URLを指定してストリームを開いて後は行単位で読み込む。nilを返したら終了。

ただ、この処理を使いたい環境がSwift2だったので自分で使う用に修正した。

初期化失敗時の扱いが上手く出来ず、URLを指定するのではなくFileHandleを指定してストリームを作成するように変更してしまった。

let stream = StreamReader(stdin)
while( true ) {
    guard let line = stream?.nextLine() else { break }
    ...
}


Swiftの条件式の書き方に慣れていないので、手っ取り早く true で回して break で抜けるように書いてしまった。ちゃんと習得しておかねば。