28 2月 2015
Swift 1.2 & Xcode 6.3 beta
Swift 1.2が出ました。コンスタントに改良、機能追加されていていいですね。
Today Swift 1.2 was released as part of Xcode 6.3 beta. This beta release includes a significantly enhanced Swift compiler, as well as new features in the Swift language itself. For the complete list of changes, read the release notes. This blog post will focus on the highlights.Swift Blog
Swfit 1.2 と Xcode 6.3 ベータ
2月9日(現地時間)にSwift 1.2 が Xcode 6.3 ベータ版に収録されてリリースされました。このベータ版には大幅に強化されたSwiftコンパイラとSwift言語の新機能が含まれます。すべての変更についてはリリースノートを参照して下さい。ここでは重要な点に焦点をあてています。
コンパイラの改善
Swfit 1.2 のコンパイラはより安定して、かつパフォーマンスを改善するようにあらゆる方法で見直されました。これらの変更はXcodeでSwiftを動かしたときにより体験することができます。目に見える改善は以下のことです。
- 差分ビルド – デフォルトでは変更のないソースファイルはコンパイルされません。ほとんどの場合においてビルド時間をかなり短縮してくれます。より大きな構造の変化があったときには、再構築するのに複数のファイルを必要とする場合もあります。
- より高速な実行形式 – デバッグビルドはかなり高速なバイナリを生成し、新しい最適化のおかげでよりよいリリースビルドのパフォーマンスを得られます。
- 優れたコンパイラ診断 – Fix-itが新しくなりエラーや警告メッセージがより明確になりました。そのためSwift1.2のコードを正しく書くのがより簡単になっています。
- 安定性の向上 – 多くのよくあるコンパイラクラッシュが修正されています。XcodeのエディタでSourceKitの警告を見る機会が減るでしょう。
Swift言語の新機能
Swift1.2では言語が安全で予測可能なふるまいを保証するように改良されています。SwfitとObjectiv-Cとの間の相互作用も継続的に改善しています。主な変更を以下に記述します。
- Failableへのキャスト as! – 実行時にフェイルすることができるキャストはas!という新しい演算子で表現することができます。実行時にフェイルすることがありうるということがコードの読み手やメンテナンスする人にとって分かりやすくなります。
- Nullを持てるということをObjective-Cのヘッダに記述可能 – C言語の新しいObjective-C拡張を用いると、Objective−CのAPIにポインタやブロックがNullを持てるということを記述することができます。Swiftのコードとうまく連携するObjective−Cフレームワークを提供することができ、プロジェクトで使用しているObjective-Cのコードと組み合わせるときによりよくSwiftが書けることを体験できます。
- Swift列挙型@objc属性を使ってのエクスポート – 例えば次のようなSwiftコードが書けます。
@objc enum Bear: Int {
case Black, Grizzly, Polar
}
Objective-Cにインポートすると
typedef NS_ENUM(NSInteger, Bear) {
BearBlack, BearGrizzly, BearPolar
};
- let定数はより強力になり一貫性が向上 – letの新しいルールではvarと同じように使う前に初期化されなければなりません。初期化されるだけで、初期化後の値の変更はされません。
次のコードが可能になっています。
let x : SomeThing
if condition {
x = foo()
} else {
x = bar()
}
use(x)
以前は、値の変更がないにも関わらずvarを使用する必要がありました。同様にプロパティも簡単にイニシャライザで意味付けができるようにこのモデルに織り込まれています。
- if letで展開できるオプショナルの強化 – if let構文は一度に複数のオプショナルを展開できます。ブール条件を含んでいてもよいです。このおかげで条件付き制御フローを書くのに不要なネストをしないですみます。
- 新たなネイティブのSetデータ構造 – Setは値の重複を許さない順序なしコレクションです。Objective-CのNSSetの橋渡しをし、配列やディクショナリと同じように値に意味を与えます。
最後に
皆さんが出してくれたバグに感謝しています。このベータ版で多くの課題が修正されていることを期待しています。Swift1.2は言語とツールの両方にとって大きな前進です。今までのコードに修正が必要となるような互換性のない変更も含んでいます。そのためXcode6.3には修正のプロセスを自動化するのを支援する移行ツールがついています。移行ツールを使用するにはメニューから「Edit」をクリックして、「Convert > To Swift 1.2…」を選んで下さい。