読者です 読者をやめる 読者になる 読者になる

使って創ってApp

ソフトウェアを使ったり作ったりするブログです

Swiftで標準入力

Swiftでちょっと試したいことがあるけど、iOSプロジェクトを立ち上げるまでもない。でも値の入力をプログラムの実行中に行いたい。そんな時に、コンソール画面から直接入力できるようにします。

開発環境

完成予定図

入力した文字列をそのまま表示します。

f:id:hitxutokun:20151214224502g:plain

Swiftで標準入力

C言語の scanf のように、コンソール画面から値を入力することができるようになります。

1.新規プロジェクトを作成

新規プロジェクトを作成します。テンプレートは OSX / Application / Command Line Tool を選択しました。言語は Swift を選択します。

f:id:hitxutokun:20151214215324p:plain

2.コンソールで入力する

入力には NSFileHandle クラスの fileHandleWithStandardInput メソッドを使います。

print("Input: ", terminator: "")
let input = NSFileHandle.fileHandleWithStandardInput()
let str = String(data: input.availableData, encoding: NSUTF8StringEncoding)
print(str)

現時点を Command + R で実行してみます。

f:id:hitxutokun:20151214221213g:plain

入力されているのが確認できました!しかし、問題が2点あります。

  • Optional型になっている
  • 文字列の最後に改行(\n)が入っている
3.問題解決

文字列の最後に入ってしまう改行を削除するには String クラスの stringByTrimmingCharactersInSet メソッドを使います。以下のコードを追加します。

let strInput = str!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

NSCharacterSet.whitespaceAndNewlineCharacterSet() は .whitespaceAndNewlineCharacterSet() に省略可能です。strInput を表示させるようにすると以下のようになります。

f:id:hitxutokun:20151214224502g:plain

これで完成です!

まとめ

  • scanf のようなコンソールからの入力は NSFileHande.fileHandleWithStandardInput()メソッドを使う
  • 入力した文字列には改行文字が含まれているので、String クラスのメソッドを使って削除する。