swiftを一から勉強してTODOアプリをつくるまでの過程
仕事でしばらくwebで活動していたのですが、フリーランスになったことだし、アプリ開発をまた再開しようと思い、swiftを勉強してみることにしました。
また、今回swiftを勉強するにあたり、その過程もメモしていきました。
学習の過程って意外と忘れがちですよね 😪
最終成果物はgithubにおいてます 😃
paranishian/iOSToDoApp: iOS TODO app using Realm
まずはswiftの言語仕様を理解する
iOSアプリを開発していたのはObjective-C全盛期?の4年前くらいなので、swift自体初めて触るわけで、、、まずはswiftの言語仕様をおおまかに理解するために、公式docに目を通しました。
- A Swift Tour — The Swift Programming Language (Swift 4.2)
- The Basics — The Swift Programming Language (Swift 4.2)
↓こちらはswift4には追いついていませんでしたが、英語での理解不足を補うために一緒に読みました。感謝 🙏
- Hatena-Textbook/swift-programming-language.md at master · hatena/Hatena-Textbook
- iOSTraining/1-1_swift-basics.md at master · mixi-inc/iOSTraining
ちょっと手元で試してみたい、ってときはpaizaを使いました。web上で手軽に試せて便利 😆
ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
ここで理解したこと
- クロージャーの構文
- defer
- where
- try?
- ??
- error handling
- tuple
- guard/else
- stride
このときの印象は、、、「swiftめっちゃ引数わかりにくい...!!! 😇 」 どれがkey??どれがvalue??どれが返却値??みたいな 🤣
TODOアプリをつくる
swiftの仕様はおおまかに理解できたので、なにかアプリをつくって学習するのが手っ取り早いなーと思い、仕様で迷うことが少なそうなTODOアプリを作ることにしました。
データを扱う上で、CoreDataかRealmかで迷いましたが、「使ったことがなくて触ってみたかった」という理由でRealmを採用しました。
まずはRealmのリファレンス通りにつくっていく
ありがたいことにRealmにTODOアプリのdocがあったのでそこを見ながら進めました。
ライブラリ管理ツールを決める
CocoaPodsかCarthageか迷いましたが、ライブラリ数ではまだまだCocoaPodsが優勢、との話を友人から聞いたのでCocoaPodsにしました。
- CocoaPods/CocoaPods: The Cocoa Dependency Manager.
- Carthage/Carthage: A simple, decentralized dependency manager for Cocoa
ちょっとした変更と修正
Realmのdocではサーバ同期ありきで書かれているのですが、今回はローカルだけで使いたかったのでsetup部分を少し変更しました。
また、ドキュメントどおりだとどうしてもうまくいかない部分があったのでゴニョゴニョしました。
(if realm.objects(TaskList.self).count == 0
の部分)
func setupRealm() { let config = Realm.Configuration(schemaVersion: 1) self.realm = try! Realm(configuration: config) func updateList() { // まだTaskListが存在しない場合は追加する if realm.objects(TaskList.self).count == 0 { try! realm.write { realm.add(TaskList()) } } if let list = realm.objects(TaskList.self).first { items = list.items } tableView.reloadData() } updateList() // Notify us when Realm changes self.notificationToken = self.realm.observe { _,_ in updateList() } }
ってなかんじでTODOアプリが完成! 🎉
(ほぼサンプルのままだけど)
paranishian/iOSToDoApp: iOS TODO app using Realm
とりあえず動くものが完成したので、あとは
- TODOアプリに機能追加
- 別のアプリつくる
- fastlaneでbuild自動化
あたりかな〜。
それではまた 👋