
WWDC 2014 では、様々な発表が行われましたが、プログラマとして一番魅力的だったのが、Swift という新しい言語です。
これまで iPhoneアプリを作るには、Objective-C という言語を触る必要がありましたが、元が C言語・Smalltalkから派生しているため、敷居が高い感じがありました。
今回発表された Swift は、Objective-C に置き換わる言語として開発されました。
JavaScript などのスクリプト言語を意識した作りになっています。
実際、WWDC でのデモンストレーションでは、その場でプログラムを入力するライブコーディングが行われ、Ruby や Python と同様に、コーディングから即結果が表示される姿を見ることが出来ました。
現在、Apple Developer に登録している開発者に限定して、XCode6 beta が提供されており、こちらで実際に Swfit を触ることができます。
Swift について特徴を上げてみたいと思います。
1. タイプセーフな言語
変数を定義する際、型を指定します。型推測も可能です。
var str1: String = "Text1"
var str2 = "Text2" // 型推測します
// str2 = 1 // 整数を入れようとするとエラーになります
また、定数 let が使えます。
let constValue = "can't change"
constValue = "override" // ここでエラー
2. Dictionary型の指定が簡単
こんな感じで使えます。
var array = ["one": 1, "two": 2]
3. ジェネリクス
<T> が使えます。
4. クロージャ
例えば、ソートなど、比較ロジックのみ定義したい場合などに使えます
var array = [3, 4, 2, 1]
sort(array, { (s1, s2) in s1 > s2 })
5. タプル
複数のオブジェクトをひとまとめにできます。
let valueSet = (“Number”, 123)
6. オプショナル
変数では通常、nil は指定できません。変数にオプションを追加し、nil を許容したりできます。
// var value // これだけでは、nil を代入しようとしてエラーになります
var unknownValue: String? // ? をつけると、Optional として、nil が許容されます
7. アトリビュート
細かい挙動の指定ができます。例えば Objective-C 側から、Swift側のクラスを参照させたい場合など、@objc という atribute を追加することで、参照可能になります。
8. クラス
class では、override もほか、コンストラクタ init, デストラクタ deinit
setter / getter での処理
willSet / didSet を用いてプロパティの初期化パラメータセットを調整可能です。
9. 構造体・列挙型・プロトコル
class の他、構造体 struct・列挙型 enum・インターフェース定義 protocol (Java のinterface) があります。
特に列挙型は大幅に機能が拡張されており、中にファンクションを記載し、細かい挙動を定義できます。(mutatingの指定が必要)
10. Extension
既存のクラスを拡張できる。Int型や、UI*** などへ機能を追加し、使用することができる。
11. いままで通りのメモリ管理
他の言語のいいとこ取りを目指しているように思えますが、メモリ管理だけは gc などの仕組みがなく、ARC (自動参照カウント方式) のままです。
これまで通り、Exception などもなく、weak / strong などを意識した作りをする必要があります。 (self と クロージャの組み合わせでの循環参照を意識し、新たに unowned が追加されてます)
なお、循環参照があった場合、メモリリークするので、これまで通り、注意が必要です。