Appleは,Xcode 6.3の一部として,Swift 1.2を発表した。言語の変更内容を記したリリースノート(サインインが必要)も,同時に公開されている。Swiftが最初に発表されたのは2014年6月のWWDCだが,Swift 1.0のマスタがリリースされたのは,その年の9月になってからだった。直後の10月には,早くもSwift 1.1がリリースされている。現時点ではベータ版としての公開だが,来月あるいは2ヶ月後のApple Watch販売開始と同時にリリースされる可能性が高い。これにより開発者は,一般リリースに先立って,自身のコードをSwift 1.2構文に移行するための時間的余裕を得ることができる。
まず,パフォーマンスがさらに強化された。最適化をオンにしてコンパイルされたコードの演算速度が向上しただけでなく,デバッグビルド(最適化なし)についても大幅に改善されている。これまでSwiftコードのパフォーマンスに関して,批判的なベンチマーク結果をいくつも投稿してきたDavid Owens氏でさえ,今回の改善には嬉しい驚きを見せている。
コード面では,互換性のない変更がいくつかある。その移行のためXcode 6.3には,Edit > Converter > To Swift 1.2というメニューオプションが用意されていて,as
演算子(失敗してはならないキャスト)とas!
演算子(実行時に失敗する可能性のあるキャスト)のように,必要な項目の自動変換を実行してくれる。 また,Object-Cのコンテナ型である(NDictionary
やNSArray
)が自動的にSwiftの対応型にキャストされなくなり,"nsdict ad Dictionary
" の明示的な宣言が必要になった。(逆変換はこれまで通り,自動的に行われる)また,Swiftには新しいSet
タイプがあり,Objective-CのNSSet
タイプとの橋渡しをする。Byte
などのタイプを使用している部分は,Uint8
に置き換えられる。
パフォーマンスが向上し,Objective-Cとの相互運用性改善された。nullの値を持つことのできる引数や戻り値は,Objective-Cの新しいnullabe
とnonnull
属性を使ってアノテートすることができる。Swiftではそれぞれがoptional,あるいはnon-optionalタイプに対応する。さらに@objc
属性を使って,Swiftの列挙型をエクスポートできるようになった。Objective-C側ではEnum名と,typedefされた定数値の両方に対応する。ただし,使用できるのは整数列挙型(integral enum)のみで,それ以外の値と関連データを使うことはできない。例えば次のSwiftコードは,Objective-Cでも使用可能だ。
Swift | Objective-C |
---|---|
@objc enum Direction: Int { case North, South, East, West } |
typedef NS_ENUM(NSInteger,Direction) { DirectionNorth, DirectionSouth, DirectionEast, DirectionWest }; |
let
およびif let
文もさらに強力になった。当初Swiftでは,let
値(定数)は生成時に直接初期化しなければならなかったが,この規則が緩められて,使用する前に定義されていればよくなった。結果として,次のようなコードを書くことが可能になる。
let dir:Direction if random() % 2 == 0 { dir = North } else { dir = South }
さらに,ひとつのif let
文で複数の変数へのアサインが可能になり,ネストしたif let
文は必要なくなった。
var first: String? var last: String? ... if let f = first, l = last { println("Hello \(f) \(l)") }
変更されていないソースファイルの再コンパイルの回避や,変更したソースでもインクリメンタルコンパイルを行うことにより,コードのビルド時間も改善されている。一度ビルドしてしまえば,それ以降の変更ははるかに速くコンパイルされるようになる。ブログには,Swiftコードのコンパイル中や使用中にXcodeが応答しなくなり,再起動が必要になる場合があるという,“SourceKitエラー”の軽減も明記されている。そして最後に,Practical Swiftで記録されたクラッシュの80%以上が解決された。
Swift 1.2と,それに対応するXcodeのリリース日程は,現時点では公表されていない。しかし,Java,.Net,AndroidデバイスをターゲットとするSwift言語の実装であるSilverでは,開発作業が進められている。Swiftのオープンソース化やその時期については,今のところ何のニュースもないが,そのような動きのあることは確実だ。