Swift3移行時の問題
Swift2.4からSwift3に移行した時は、旧来のC言語風なfor文が廃止されたり、nil許容型を明示しなければならなくなったり変更が大きかった。そのため、今まで開発していたプロジェクトはかなりの部分を書き換えなければならなかったし、Swift2.4にしか対応していないライブラリを使うのは一苦労だった。
Swiftはまだ開発段階で、言語仕様も安定していないから初心者にはやめておいたほうがいい、なんてことも言われていた。
今度のSwiftは基本的な構文の変更は少ない?
What’s New in Swift4のセッションをみる限り、今までの書き方を改めさせるような大きな変更は少ないように感じた。とくにGeneric等の分野で書き方の幅を広げるような機能の追加はあったが、今までを否定するものではない。
AppleのSwift4のページにも「Swift2.4から3へのアップデートのときよりも簡単に対応できます」と書いてある。
実際にSwift3のプロジェクトをコンパイルしてみた
実際にコンパイルすると、次のような警告が表示された
Conversion to Swift 4 is available. Update to recommended settings
Converstion to Swift 4 is availableとあるので、これをクリックして自動で直してもらう。
この画面で適用先を決定
インターフェースを最小化しましょう。
このように、変更前と変更後が表示される。ここでは四件自動変換が出ているが、これらは全てfuncに@objcをつけろというものだった。
ちなみに、なぜ@objcをつける必要があるかというと、この関数は#selector()で呼び出されているからだ。#selector()で呼び出すにはなぜかObjective – Cで利用できる宣言が必要らしい。これまでも必要だったが、明示しなくても暗黙で問題なかったとのこと。
また、Update to recommended settingsとあるので、こちらの設定変更も適用しておく。
Mixed Mode
Swift4での変更点は少ないとはいえ、外部ライブラリなどを使っていると、自動生成のソースでSwift4に対応しちゃえばいいというものでもなかったりする。そんな時に用意されている機能があるようだ。Swift4の新機能ページによると、Swift4コンパイラにはMixed Modeというのがあり、Swift3とSwift4との混在が可能だという。これで少しずつSwift4に対応して言ってくれたらいいよってことなのか。
今回のSwiftのアップデートは比較的楽に受け入れられそうだ。ちなみにUIKitの変更はかなりあったが、セッションでは”Very easy”を強調していた。確かに、プラスアルファの設定が必要なだけで今までのものをマストで変えなくても良いというのはうれしい。
ということで、XcodeのほうもSwift3のときは前バージョンを残して両方に対応できるようにしていたが、今回は大丈夫そうだ。以上、躊躇せずにSwift4始められるよっていう話でした。