5日くらいSwiftを勉強したことのまとめ
年末年始でちょっとSwiftを勉強してみたので、やったことをまとめてみた。
読んだ本
詳細! Swift 2 iPhoneアプリ開発 入門ノート Swift 2 + Xcode 7対応
- 作者: 大重美幸
- 出版社/メーカー: ソーテック社
- 発売日: 2015/11/14
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 荻原剛志
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/12/25
- メディア: 単行本
- この商品を含むブログを見る
とりあえず、2冊とも一通り読み終わった*1
詳細! Swift 2 iPhoneアプリ開発 入門ノート
Xcodeをまともに触ったこともなかったので、基本的なXcodeの使い方から説明があって分かりやすかった。
Swiftの基本文法、iPhoneアプリの作り方の基本が書かれている感じ。 StoryboardでComponentをポチポチと置いて、ViewControllerに実装書くとかを試して、なんとなくiPhoneアプリ開発の流れを感じることができた。
詳解 Swift 改訂版
Swiftの細部まで細かく記載されていて、入門ノートでは言及されていない箇所まで勉強できてよかった。 メモリ管理とか、プロトコル指向についても言及されているので、他言語を触ったことある人はこれ1冊読んだらだいぶ理解が進むと思う。
Swiftやって面白かったところ
他の言語をいくつか触っていたのでSwift勉強していても「どこかで見たような機能だなー」ってくらいの感想だったけど、
- メモリ管理
- プロトコル
この2つは他言語に比べて、ちょっと変わっていたのでブログに書いておく。
メモリ管理
今まで触っていた言語でC/C++だとfreeとか書いてたけど、JavaやRubyを書いているうちにあまり意識しなくなってた。
しかし、SwiftにはGCがなくて、ARC(Automatic Reference Counting)というメモリ管理方式が使われているため、
参照を意識したプログラムをしないといけない。
このあたりは気をつけないと、GCに慣れたエンジニアはメモリリークとか起こしてしまいそうなので注意が必要。
weak
か unowned
を使うと循環参照を防げるので、最初のうちは気をつけるようにしたい。
プロトコル
個人的にこれが一番衝撃的だった。 プロトコルってのはJavaのインタフェースみたいなもので、このプロトコルに実装を持たせることで多重継承を実現できる。
多重継承はメソッド名の重複が問題になったりするもので、他言語だと「重複はコンパイルエラー」とか「優先度の高い方が選ばれる」みたいなのが多い。
しかし、Swiftではメソッドの重複を許容している。
説明しても分かりづらいので、サンプルコードを書いておく。
protocol StringConvertible {} extension StringConvertible { func toString() -> String { return "StringConvertible: \(self)" } } protocol StringType {} extension StringType { func toString() -> String { return "StringType: \(self)" } } class User : StringConvertible, StringType {} let userA:StringConvertible = User() print(userA.toString()) // StringConvertible: User let userB:StringType = User() print(userB.toString()) // StringType: User
Rubyとかだとメソッドを上書きしたり、されたりって感じのことができるけど、Swiftだとプロトコルでキャストする感じなんだなーと言語の思想みたいなのが見えて面白かった。
*1:詳解の15, 16章のObj-C連携は飛ばしたけど