いものやま。

雑多な知識の寄せ集め

Swiftをプレイグラウンドで使ってみた。

昨日はコマンドラインからSwiftを使う方法について書いてみた。

今日は、プレイグラウンドでSwiftを使う方法について。

プレイグラウンドとは?

プレイグランドとは、XcodeでSwiftを対話的に使える環境。
ちょっとしたコードを試したり、簡単なデバッグを行いたいときに便利。

プレイグラウンドの作成

プレイグラウンドを作るには、Xcodeのメニューから「File」-「New」-「Playground...」を選択するか、「Welcome to Xcode」のウィンドウから「Get Started with a playground」を選択する。

そうすると、次のようなウィンドウが表示される。

f:id:yamaimo0625:20150620024059p:plain

ここでプレイグラウンドの名前を適当に入力し、プラットフォームを選択する。
そして、プレイグラウンドのファイルの保存先を指定すると、プレイグラウンドが作成される。

プレイグラウンドの基本的な使い方

プレイグラウンドが作成されると、次のようなウィンドウが表示される。

f:id:yamaimo0625:20150620024227p:plain

左側がエディタで、右側にSwiftの文を実行した結果が簡単に表示されるようになってる。

プレイグラウンドを作成した直後は、"Hello, world"よろしく、"Hello, playground"という文字列を変数strに代入していて、その変数strの内容である"Hello, playground"が右側に表示されている。

ここにSwiftのコードを書いていくと、そのコードが即座に実行されて、その結果が表示されていく。

例えば、昨日と同様に、フィボナッチ数列を出力する関数を定義し、何度か呼び出してみると、以下のような感じ。

f:id:yamaimo0625:20150620024301p:plain

関数fibonacci()が定義されていて、呼び出すたびに、1, 1, 2, 3, 5, 8, 13と、フィボナッチ数列の数が返ってきているのが分かるかと思う。

実行結果の詳細の表示

for-in文でループを実行しているところをみると、結果のところに(5 times)と表示されている。
これは、この部分が5回実行されたということ。
ただ、何回実行されたのかだけでなく、実際にどのような値が返ってきたのかも知りたいところ。
そんなときには、「リザルトビュー」を表示させるといい。

f:id:yamaimo0625:20150620024322p:plain

上の画像のように、(5 times)と書かれた行の右側にカーソルを持っていくと、目のアイコンと丸のアイコンが表示される。
丸のアイコンにカーソルを合わせると内側にプラスマークが表示されるので、その状態でクリックをすると、エディタ内に「リザルトビュー」が表示される。
(なお、Xcodeのバージョンによっては、後述の「タイムライン」内に表示されるかもしれない)

リザルトビューを表示させた様子が、次の画像。

f:id:yamaimo0625:20150620024408p:plain

繰り返しの中でどのような値が返ってきてたのかをグラフで見ることが出来る。

この状態でウィンドウ下部のスライダー(タイムラインスライダー)を動かすと、グラフの値の変化の様子が分かる。

例えば、以下のような感じ。

f:id:yamaimo0625:20150620024423p:plain

現在位置のところに赤の縦線が入り、値が表示されているのが分かると思う。
(ただ、このタイムラインスライダーと、その右側にあるタイムフィールドは、なんか仕様がよく分からない・・・)

リザルトビューでは、表示をグラフ以外に切り替えることも出来る。

リザルトビューの右上にカーソルを持っていくと、表示を切り替えるためのボタンが表示される。

f:id:yamaimo0625:20150620024531p:plain

このボタンを使って、グラフ表示や現在の値の表示、すべての値の表示を切り替えることが出来る。

例えば、すべての値の表示を選択すると、次のような感じになる。

f:id:yamaimo0625:20150620024626p:plain

なお、リザルトビューを消すには、リザルトビューにカーソルを持って行ったときに左上に表示されるバツマークを押すか、リザルトビューを表示させるときに押した丸のアイコンを再び押せばいい。

ウィンドウの構成の変更

プレイグラウンドでは、ウィンドウの構成を変えて使うことも出来る。

ツールバーの表示

ツールバーを表示させるには、メニューから「View」-「Show Toolbar」を選択する。
(もしくは、ウィンドウのタイトルバーを右クリックし、コンテキストメニューから「Show Toolbar」を選んでもいい)

ツールバーを表示させると、以下のような感じ。

f:id:yamaimo0625:20150620024648p:plain

エディタの表示を切り替えるボタンと、ナビゲータ、デバッグエリア、ユーティリティの表示を切り替えるボタンが、ツールバーに用意されている。

タイムラインの表示

エディタの表示を切り替えるボタンでアシスタントエディタも表示させるようにすると、アシスタントエディタに「タイムライン」が表示される。

タイムラインを表示させた様子が、次の画像。

f:id:yamaimo0625:20150620024714p:plain

「Console Output」と題されたビューには、プレイグラウンドを実行したときのコンソールへの出力が表示される。

他にも、XCPlaygroundというフレームワークを使うことで、実行中の様子をタイムラインに表示させることが出来る。

ナビゲータの表示

ナビゲータの表示を切り替えるボタンを押すことで、ナビゲータを表示させることが出来る。

f:id:yamaimo0625:20150620024738p:plain

ナビゲータを表示させると、プレイグランドを構成するファイルを見たり、編集することが出来るようになる。

サポートコードの使用

ナビゲータを見てみると、Sourcesというフォルダの下にSupportCode.swiftというファイルがある。

f:id:yamaimo0625:20150620024844p:plain

このファイル(およびSources以下に置かれたSwiftのファイル)はサポートコードで、モジュールとしてプレイグラウンドに自動で読み込まれ、プレイグラウンドから使うことが出来る。

例えば、昨日書いたフィボナッチ数列を得るクラスをサポートコードとしてSourcesに追加してみる。

f:id:yamaimo0625:20150620024906p:plain

一つ気をつけたいのは、サポートコードはモジュールとしてプレイグラウンドに読み込まれるということ。
なので、可視性を正しく設定してあげないと、プレイグラウンドからは使うことが出来ない。

例えば、Fibonacciというクラスを昨日はinternalなクラスとして定義していたけど、そのままだとプレイグラウンドから使うことは出来ない。
というのも、プレイグラウンドはモジュールの外側のコードなので、internalなクラスには外側からアクセスできないからだ。
なので、外側からもアクセスできるように、可視性をpublicにしてやる必要がある。

サポートコードで定義したクラスを使うと、次のような感じ。

f:id:yamaimo0625:20150620024931p:plain

ちゃんとオブジェクトが生成され、メソッドが実行されているのが分かると思う。

今日はここまで!