概要
今日の2時から4時まで行われたWWDC、リアルタイムで見られていた方お疲れ様でした。
私もストリーミングを見ながら、テンション高めで色々つぶやいていました。
さて、今回のWWDCは原点回帰というかなんというか、エンジニアのエンジニアによるエンジニアのためのキーノートだったように思います。
デバイスの発表一個もなかったしw
ということで、そんなエンジニア得な発表で一番目を引いたのが掲題のSwiftでしょう。
今回はそのSwiftについて、公式ドキュメントの中のA Swift Tourをざっくり通勤電車の中で読んでみたので、そこで気になった点をお昼休みに適当にまとめてみましたという内容です。
ちな、iOS歴
iPhone SDKだったころからいじってます。アプリも何個か出してます
(最近はもっぱらTitaniumでJSでしか書いてないですが)
A Swift Tour
それでは旅にでましょう、ガリバーっぽく、スイフトだけに
論理行末は改行なのかな?
よく分からんが見た感じ
型宣言が後置修飾
Scalaスキーにはお馴染みですね。動的型付けやるのには後置修飾の方が省略とかしたときに直感的です。
let impInt = 70
let implDouble = 70.0
let expDouble: Double = 70
(一応マークダウンのコード引用で書いたんですが、swiftのシンタックスハイライトは当然ないですよね、分かります)
Swiftの関数は第一級関数
これもScalaとかモダンな言語やってると大変当たり前ですね。
何て説明してるかというと、
Functions are a first-class type. This means that a function can return another function as its value.
つまり、関数が値返すんで変数に詰めたり、関数の引数に関数入れたりできます。まあ、改めて言うまでもないですね。
structとかいうキーワード
こんな感じで、classキーワードと同じように使うようです
struct Card {
var rank: Rank
var suit: Suit
func simpleDescription() -> String {
return "The \(rank.simpleDescription()) of \(suit.simpleDescription())"
}
}
classキーワードとの差異は、
One of the most important differences between structures and classes is that structures are always copied when they are passed around in your code, but classes are passed by reference.
とのこと。参照と値で異なる感じで
コンストラクタとデストラクタ
それぞれ、initとdeinit。
classの例
ざっくりこんな感じになるよう
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
deinit() {
// do something
}
}
まあ、違和感はほとんどないシンタックスになってます。
普通のPG(フルスタック?)なら、上の公式ドキュメントちょろちょろ眺めながら、今日からでもすんなり書けるのではないですかね、よく分かんないですけど。
あえて言えば、下記の仕組みがまだ詳細にA Swift Tour以降のドキュメントを読まないとよく分かりません。
- willsetキーワード
- mutingキーワード
お昼休み終わっちゃったんで、あとはまあおいおいやる気が出たときにでもノシ