iOS開発/Swiftについて勉強した記録をするリポジトリです。
以下のドキュメントは時系列順ではなく、勉強カテゴリ別です。
・Repl.itというオンラインエディタ上で実験した
・AtcoderのAB問題を50問解いて文法の練習をした
・Xcode上でプロジェクトを作った
・プロのコードレビューを受けた
・Bitriseを使ってみた
・アプリストアに自作アプリを公開した
・上の中には書いていない、勉強の中でつまづいたところとそれに対する自分なりの理解を書いた
・今後勉強したいこと
という構成です。
手軽にSwiftを動かせる環境として、Playgroundも良かったが共有も簡単な [Repl.it](https://repl.it/) というオンライン上で使えるエディタのWebサービスを活用した下記に文法名とリンク先に実際書いて勉強したコード
https://repl.it/@oimo23/Bian-Shu-Ding-Shu
https://repl.it/@oimo23/Pei-Lie
https://repl.it/@oimo23/Guan-Shu-Ding-Yi
https://repl.it/@oimo23/Zao-riFan-si
https://repl.it/@oimo23/MathXi
https://repl.it/@oimo23/map-reduce-filter
https://repl.it/@oimo23/sototoreverse
https://repl.it/@oimo23/Structtoha
https://repl.it/@oimo23/Optionaltoha
https://repl.it/@oimo23/Structtoha
https://repl.it/@oimo23/ClasstoEnum
https://repl.it/@oimo23/extensiontoha
https://repl.it/@oimo23/Xun-Huan-Can-Zhao-tomemoririku
https://repl.it/@oimo23/Protocoltoha
https://repl.it/@oimo23/ProtocolnoextensionwoLi-Yong-sitadehuorutoShi-Zhuang-nituite
プログラミング言語の文法を体に身に付かせるのはAtCoderのAB問題をやるのが一番良いと思った経験からやってみたRepl.itで学んだことが体に馴染んだ
0除算をするとバグる
配列に対するmax()など 返り値がoptionalなやつがあるので注意しないといけない
optionalの安全なunwrapは guard let unwrapped = mayOptional else { return } でやる?
・アイコンの設定の仕方
・アイコンは解像度別に何種類か用意してあげないといけないこと
・appicon generatorというサイトがアイコン作るのに便利だということ
・StoryBoardを使うとPhotoshopとかみたいにGUIでTextやImageを簡単に配置出来た
・SEでビルドしたら、左上がクロッピングされた感じになった ➡︎ AutoLayoutを使えばとりあえず良いと知った
・CocoaPodsの使い方、またそれを利用したサードパーティのライブラリの使い方を知った
・SwiftLintの使い方を知った
・MVC、MVPのディレクトリ構造 設計の仕方を自分なりにだが解釈できた
・XCTestを用いたユニットテストのやり方を知った
・Alamofireを使ってAPIを叩く方法を知った
・APIから貰ったJSONを整形して画面上に表示する流れを知った
・CoreLocationで位置情報を利用する方法を知った
・Delegateの使い方を知った
・Realmを使ってローカルにデータを永続化する方法を知った
・テーブルの使い方を知った
あるサービスで現場で開発しているiOS開発者にコードレビューを受けた。
有償でやってもらったので、詳細はこのリポジトリには記述しないが、大まかに
・プロジェクト全体で使うConstantな値の管理は、Singletonパターンを適用すると良い
・クロージャ内のselfは[weak self]で弱参照にしないと循環参照になることの具体例
・メインスレッド以外で画面更新を行おうとすると失敗するかクラッシュする
などの知見を得ることが出来た。
アプリ公開までの流れを知りたくてまずリリースしてみた。
とてもシンプルなのでMinimun Functionsで弾かれるかと思ったが無事審査に通過出来た。
・Developerライセンスの取得
・アプリのアーカイブ
・証明書の設定
・リリース時の情報記入の方法
など実際にリリースする流れを掴むことが出来た
GitHubのリポジトリと連携して、指定したブランチにpushがあったらBitrise側で設定したWorkflowを実行するやり方を知った。
Testの実行と、プロジェクトのアーカイブ、iTunes Connectへのデプロイまで自動化出来た。
基本的なBitriseの知識不足、証明書関係のエラーが出まくり、1週間くらいハマってアプリ自体の開発より辛かった。
Swift特有でとっつき辛かった
nil (null) が入っているかもしれない型のこと
Swiftではnilはちゃんと扱わないとアプリが落ちるようだ
String? なら、Stringかnilを許容する
StringとString?は型としては完全に別のもの
Optional型から値を取り出すときにはUnwrapという作業が必要になる
最初はまったく理解出来なかったが、何回もググったり、Repl上で実験したりコードレビューを受けて少し理解出来た。
循環参照によるメモリリークを防ぐために、弱参照を使用するのだと理解した。
クロージャが絡むと出てくる気がする。
delegateはかなり理解に苦しんだけど、実は単にUITextFieldなどのクラスが持っているプロパティ名だと思う。
何かイベントを起きたことを通知してUIViewController側でそれを利用して処理をしたいときに、delegateにUIViewControllerを指定しないと使えない。
そしてUIViewController自身もUITextFieldDelegateに準拠していなければいけないということだと思う。
classやstructがどんな関数や変数持ってるか指定するものだと理解した。
普通の変数に対して型が指定されるのに対して、classやstructにはprotocolを指定してやるという事だろうか。
単にふるまいを定義するだけでなく、デフォルト実装というものも指定出来ると後から知った。
参照されるとき初めて初期値が設定されるらしい
メモリの節約のため? 画像で言うところ必要な時まで読みこまない lazy load 的な発想から lazy って名前なのだろうか?
正直よく分かっていない
Optional型の安全なunwrapの時に使うものと理解した
パッケージ管理をしてくれる
npmみたいなもの
pod init でファイルが出来て、そこに必要なパッケージの名前を書いて cocoapod install すると入れてくれる
ファイル内で「import ○○」と書くと使えるようになる
_ をつけると引数名を省略出来るらしい func numberThreeTimes(_ num: Int) -> Int { return num * 3 }
numberThreeTimes(2) // これで良くなる
よく分かっていない
cocoapodを使うとxcworkspaceで開く必要があるようだ
finalをつけるとそのクラスは継承されないことが保証されるらしい
-RxSwift
-ProtocolやEnumを活用したSwiftを有効活用した書き方を使えるようになりたい
-SwiftUI