2015年6月26日金曜日

Swift事始め

近い将来、Apple様がObjective-Cだけで書いたアプリを認めてくれなくなりそうだという噂もあるので、Objective-Cに代わる新言語Swiftの勉強を始めた。
慣れてないので間違いもあるかも知れないけど、以下覚え書き。

Objective-Cでヘッダファイルと実装ファイルの2つが必要だったが、Swiftでは拡張子.swiftの1つのファイルだけでいい。

letで定数、varで変数を定義して使う。
Objective-Cとかで定数っていうと、コードの頭で定義する特別な値ってイメージがあるが、Swiftでは後から変更しない値はどんどん定数として定義して使う文化らしい。
Objective-Cのimmutableとmutableの概念も、クラスを定数に代入して使うか、変数に代入して使うかで使い分ける。

変数や定数の型は、定義時に代入する値によって勝手に決めてくれるので、Objective-Cほどしっかり書かなくてもいいけど、逆に暗黙の型変換とかしてくれないので、違う型どうしを計算したりする場合は明確に型変換してやる必要がある。

Objective-Cで以下に当たるものは、
    int a = 10;
Swiftでは以下のように書く。(定数ならlet)
    var a:Int = 10

コードを一行に続けて書かなければ、行末にObjective-Cでおなじみの ; は付けなくてもいい。

変数(定数)名にUNICODE文字が使えるので、このような恐ろしい命名も可能!
    let 全裸中年男性の数:Int = 100
    var 💩の数:Int = 10000
(下の行、文字化けしてると思うけど、Xcode上はウンコの絵文字です)

文字列はNSStringも使えるようだけど、通常はString型を使う。

インスタンスのメソッドは、funcとして定義する関数で返り値が不要ならメソッド、必要なら関数…といった認識で良さそう。

プロパティはObjective-Cのインスタンス変数みたいに、クラス名直下の{ }の間に定義しやればいいみたい。

viewDidLoadとかのオーバーライドして使うメソッド(関数)は、関数名の前に明確にoverrideって書いてやる。

カスタムクラスを作っても、使う方のファイルのコードの頭でimportしなくても使えてしまう。というか、importしようとするとエラーになる。