bbs
oopers.com
5188 OOPer: 2014-08-05 04:16:27
Swiftいろいろ: [9] beta5での変更点
ネタをこっちではなく、dev forumに提供しているうちに、2週間を待たずしてbeta5が発表された。

変更点は微細なものから、プログラムの書き直しを必要とするものまで多岐にわたる。明らかにdev forumでの活発な議論が影響を与えたであろうものも少なくない。眠れぬ夜の時間つぶしとしては、多すぎるのでいくつかピックアップ。

 Optional型のLogicValueプロトコル準拠が廃止された。

これにより、if-let構文以外でのnil判定がちょいと長くなるが、はっきり言って、「元からそうすべきだったんじゃないの?」ってところだ。LogicValueプロトコル自体はBooleanTypeと名前を変えて残っているので、Int型にいけないextensionを定義することは出来るはず。(現在DL中でまだ試していない。)

 Optionalチェイニングが代入でも使えるようになった。

ま、前は使えなかったってのが明らかにおかしい。構文解析上の問題もあるんだろうが、何でもOptionalのAnyObjectのプロパティへの代入はまだ出来るようになっていない。

この他にもOptional絡みの変更はてんこもり。どっかの言語で見たことのある??なんて演算子も追加された。

 Range型がRangeとIntervalにコンセプト分けて再設計された。

まだ何がどう違うのかようわからん。

 標準ライブラリーのOptional関連の扱いやポインタ関連の扱いが変更になった。

本質的にnilもあり得るのにImplicitlyUnwrappedOptionalになってるところが、Optionalになってたり、ポインタから変換されるデータ型名がすっきりと整理された。

 dynamic修飾子の導入

Objective-Cのメッセージディスパッチングは、インタープリタ言語の一部かと思うくらい動的に処理されるのだが、Swiftの静的解析だけではそこら辺のことを利用されているかどうかがわからないので、最適化されてしまうことがあった。dynamicを付けておくことにより、必ずObjective-C流に動的にアクセスできるようになる。

 prefix, postfix, infixも宣言修飾子になった。

コンパイラの処理上の問題というよりもObjective-C的な表記からさよならしたいんだと思う。
(@を残すのは、最終的にObjective-C的な部分だけにして、それからJavaのannotation的にしていきたいんだろうと思う。)

 Arrayに対する+=演算では、Arrayしかつなげられないようになった。

中身の要素だけつなげれば良いのか、配列全体を1個の要素として付け足せば良いのかわからんって理由。AnyとかAnyObjectの配列のときに困るってことなんだが、要素1個付け足すときにも+=が使えたのが駄目になるのはちょっともったいないかな。+= [要素]と書けば良いだけなのだが。

他にも動かしてみなきゃようわからん細かい変更も多数。とりあえず文法上の変更よりも、ちょっとしたことでcrashする不安定さをなんとかしてほしいのだが。