top of page
  • isana.net

Swift について

更新日:2019年12月24日




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 が追加されてます)


なお、循環参照があった場合、メモリリークするので、これまで通り、注意が必要です。

bottom of page