ちょうどシルバーウィークの頃に、iOS 9のUIWebViewが今までのように動かないというので、右往左往していました。
その右往左往は結局解決することはなく、既存アプリの対応策としてネイティブでの書き直しという結論に至り、いまSwiftを書きまくっています。ネイティブ化が決まったとき、SwiftかObjective-Cかは議論になったのですが、基本的にこれからはSwiftだろうということで、Swiftにチャレンジすることにしたのです。
それまでSwiftは全く調べていなかった私としては、新たな戦いが始まったのであります。
戦いは現在約1か月経過。感じたことをまとめておこうと思います。
バージョンアップが激しい
SwiftがAppleから発表されたのが2014年6月。まだ1年半程度しか経っていないのですね。
それ故か、Xcodeの新バージョンが出る度にSwiftもバージョンアップしているというのが現状。
アプリを書き始めた1か月前はSwift2.0だったのに、既に2.1になったという有り様(今は2.1で書いています)。
そのため、出版されている解説書はまったく追いつけず、たぶん未だSwift1.2に対応したものがやっと。
Webで検索しても1.2の情報が多く引っかかるので、Google検索時は期間指定をするのが必須です。
早く落ち着いて欲しいところだけど、どうなることやら。。。
まだまだ情報が乏しい
ということで、Swift2.1の情報は非常に乏しいのですが、そうでなくてもSwift自体の情報が乏しいのも事実。
Objective-Cと比べると歴史が比ではないし、今まさに書かれているアプリもまだObjective-Cの方が多いかもしれませんしね。やむを得ないところです。
とはいえ、情報はそれなりに増えてきていると思うし、ライブラリも揃いつつある状態ではあると思います。
私も微力ながら、公開する情報を増やしていきたいと思います。
Objective-Cのコードは簡単に呼び出せる
いま書き直しているアプリはCordovaベースなのですが、プラグイン等でObjective-Cのコードがそれなりにあります。
Objective-Cのコードくらいは、もちろんSwiftから呼び出せます。
Bridging-Header.hというファイルを書き、Build Settingsで指定します。
ファイルの中身は、呼び出したいObjective-Cのヘッダファイルを指定するだけなので、簡単です。
少々煩雑に感じる言語仕様
プログラミング言語のトレンドをガッツリ盛り込んできた感のあるSwiftは、少々煩雑に感じる言語仕様もあります。もちろん、それぞれ意味があるものなので、有効活用すれば良いのですけどね。
Optional
SwiftといえばOptionalというくらい?プログラミング中にずーーーっと頭のどこかで考え続ける必要があるOptional。
要するに、nilを許容するのか否かを厳密に管理するのがOptionalなのですが、今までnilも空文字もゼロもいっしょくた(というのは過言か)だったようなJavaScriptと比べると、なかなか大変です。
でも、本来的には空文字やゼロとnilは別のものであり、その違いを無視したコードを書いたが故にバグの温床となってしまったという経験もあります。Swiftではその違いを常に意識して仕様を決め、コードを書くので、そうした問題が起きづらいというのはメリットに違いありません。
letとvar
letは定数、varは変数。
多くのプログラミング言語で定数とはハードコーディングすることがためらわれるような文字列や数値を表現するために使われていて、それ以外はすべて変数にすると思います。
しかし、Swiftにおいては必ず値が変更されるのがvarであり、初期値を設定してから値が変わることがないのであればletにしなければならないのです。
コンパイルエラーになるわけではないのですが、Xcodeから常に(しかもリアルタイムに)警告を与えられ続けるので、値が変わらないvarはletに書き直しましょう。
慣れてくるとスムースに書ける
と、まぁ、気になることもいくつかあるSwiftですが、書いたコードの見た目は非常に素直です。(Objective-Cが変態過ぎるのだ。)
メモリ管理は相変わらずARCでガベージコレクションではないけれど、まぁそれほどは気にする必要はないし(Objective-CもARCが出て以後は同じ)、ヘッダファイルを別に作る必要もないし。
上で少しくさした言語仕様も、ジェネリクスやクロージャがシンプルに書けるので、なかなか良いのではないかと思います。
ということで、この記事を皮切りに、Swiftの実践的な記事も今後は書いていきます。