Head First iPhone & iPad Development

世の中iPhone6/6+発売にてお祭りになっているようです。私は6月にT-Mobile版のiPhone5sを購入してますので今回は残念ながらスルーです。愛用の Gild design ソリッドバンパー for iPhone5/5s も形状が大きく変わった6対応製品は出てませんので、約一年後にiPhone6++で5sと初代iPad miniのダブル置き換えを考えたいと思います。

ハードウェアで波に乗れない中、ソフトウェアのほうはiOS8の波に乗ってみました。私のiOS開発経験は5年前ぐらい?出始めのころの調査目的で、アプリ一本も完成させていないぐらいのものなので、基本的なことは書けるけどほぼ白地です。さてXcode6をダウンロードしてみると...でもあまり変わってないですね。Storyboardなるユーザーインターフェイス定義ツールが見慣れないがこれもまた面白そう。今回一番変わったのはやはり新言語Swiftの登場です。旧来のObjective-Cについては、それはそれで読み書きできてましたが、私は他のC系言語に比して独特の書き方が前面にでているところにいつまでも慣れなさがありました。Swiftはそのへん良くある感じで、Go言語に近い様子だと思いました。うっかりするとSwiftにGoが混じる。

Swift関連のドキュメントは週末いろいろ乱読してみましたが、最終的にはApple謹製の二冊のiBookを読むとオッケーだと思います。とりあえず日本語インプレッション記事をサーフィンして雰囲気つかんだあとにでもご覧ください。現時点で最新版にキャッチアップしてまとまったものというと本家のものばかりですがそれらが良く書かれている。6月にSwift発表直後にさらっと説明されたインプレッション記事は多くありますが、この9月の1.0リリースまでに少々変わってるところもあります。

両方ともサンプルコード断片が沢山あるのでそれを見て、意味がわからないコードがあったら前後の英文読むぐらいが捗ります。私はどちらかというとObjective-Cとの関係が書かれた二冊目のほうを流し読みながら進めました。SwiftObjective-Cの両方での同一動作コードが並んで書かれているので、Objective-Cの前提があれば早いと思います。同時に変数宣言〜型〜代入&演算〜関数と言語の基本的なところを一冊目で流し読んで、あとは各論について必要に応じて参照します。

Swiftのとにかく素敵なのは、Objective-Cでは書き手に責任のあったメモリ管理がなくなったことかと思います。JavaやGoのようにコードでメモリ確保と解放をしない。参照管理も実はweakリファレンスの概念があったりして全く無かったことにはなってないのですが、頻度は低いです。そしてはじめ良くわからなかったのはoptionalというもの。実はこれが後にはとても良くできた言語仕様だと理解しました。Null Pointer Errorを出さないように〜コード書くときに注意して〜ユニットテストでつぶして〜結合テストでログを眺めるというようなことを、普段は努力と習慣で行うのでしょうが、Swiftはこれをほぼ完全に言語仕様で担保しちゃってます。

var window: UIWindow //var 変数名: 型

上記のような一行を書くだけだと、初期化コードが無いとコンパイラエラーが出ます。 以下もダメ。

var window: UIWindow = nil

nilは変数に代入できません。ただし書き方として実行時まで値セットを遅延せざるを得ないorしたい場合は以下のように書きました。

var window: UIWindow?

この型のお尻に?をつけるのがoptional。nil代入もでき、初期化を遅延させることもできます。しかし一旦optionalにするとこの変数を参照するときに制限ができます。

var w = window.frame.width //初期化で文脈上明らかなのでwは型宣言省略できます

上記はwindowがnilかもしれないということでコンパイル時にエラー。他の言語ではこれは書けちゃって実行時にnilだとぬるぽが出ますが、Swiftだとそもそもコンパイルできない。

var w1 = window?.frame.width

var w2 = window!.frame.width

上記どちらかを書きます。optionalにした型は?をつけたそのままで使うと、もしnilの時にはその後の処理をスキップしてくれる。もしくはoptionalを剥がす演算子の!をつけるとコンパイラは通るけど実行時にぬるぽがでるかもしれない。もちろん最終的には書き手に責任があるのですがここまで明示されているので、いままで通りに値の中身を意識する際にとても助けになっています。結論としてSwift楽でいいです。いままでのiOS開発の参入障壁をとてつもなく下げると思います。すでにiOS8ではSwift用のライブラリヘッダファイルが完備されていて、ドキュメントもSwiftファーストになってきている雰囲気なので完全にレディ状態。巷の開発者トレンドもここから一年ぐらいで様子がらっと変わるんじゃないかな。6月に騒ぐのは現実感無く仕事と無縁でしたが、9月の今は職業プログラマも騒いでいいと思います。1.0が出たばかりな上で、キャッチアップも数日で可能ですからぜんぜん遅くないですしね。

この本、HillsdaleのBarnes & Nobleで見かけたので買いました。iOS7対応なのでSwiftではないですけど古い知識からアップデートするにあたってiOS開発全般にざくっと思い出したり小ネタを仕入れられるものとして。O'ReillyのHead Firstシリーズは絵本のような作りで図が多いし、中身も本質的かつ汎用なところに絞っているのでパラパラ斜め読みするのに良いです。iOS向けHead Firstは日本語翻訳版が出ていなかったのであるの知りませんでした。早速Storyboardのところから拾ってます。

SwiftでiOS8開発たしなむにあたって、もちろんSwiftの文例があるドキュメントがわかりやすくていいですが今は無いのと、慣れればObjective-Cとの読み替えはほぼ一対一にできるのでiOS7向けのレシピ本あたりを次に買い足そうかなと思います。