今でこそメインで使っているプログラミング言語がSwiftになり、だいぶ慣れてきたのだが、Swiftを使い始めた時はその言語仕様の違いからかなり戸惑った。ここでは私が戸惑ったことなどを書いてみたい。
まずは、nilを許容するかどうかが明確に分かれるようになったことである。Objective-Cではすべてのオブジェクト型がnil型を許容する型として扱われたが、Swiftではnilになりうる型とそうではない型が分かれるようになったのは周知の通りである。
当初はこの違いを吸収しきれずにコンパイルエラーやアプリクラッシュを引き起こし、現在でもときおり起こすものの、安全性を確保するということを考えると望ましいのだろう。
次にインポートについてである。Objective-Cでは他のクラスを使う場合はプロジェクト内のファイルだろうが外部のフレームワークのものだろうが明示的にインポートする必要があった(これはC言語の仕様を引き継いでいるのだが)一方、Swiftではモジュール単位になっており、プロジェクト内のファイルは暗黙的にインポートされる。これは便利ではあるのだが。
また、Swift 3以降ではC言語方式のforループやインクリメント・デクリメントをはじめ、C言語を引き継いだ「Swiftらしくない」構文のいくつかが使えなくなった。代替記法があるとはいえ、この点は少々不便ではある。
個人的に一番戸惑ったのは「コンパイラーのバージョン間ではバイナリーの互換性がない」ということである。これは、Swiftで書かれたフレームワークを頒布する際は、事実上オープンソースである必要があるということである。というのも、各コンパイラーでビルドしたバイナリーを頒布するのは面倒であるからである。とはいえ、オープンソースプロジェクトでは新しいバージョンに対応させるためにメンテナンスを常に行う必要があるという点を除けばあまり問題になることではないが。
ようやくSwiftの流儀に慣れてきた感はあるが、戸惑う点はまだ残っている。今後はSwiftが広まっていく可能性があるため、使いこなせるように是非とも理解を深めていきたい。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。