『Swift 4プログラミング入門』を一読した

大学のハッカソン(Masala)に参加するためにSwiftのリハビリをかねてSwift4プログラミング入門を一読しました。

結論から言うとリハビリには最適の一冊でした。

本書の構成

Part1. iOSアプリ開発の始め方

         capter1. Xcode入門

part2. Swift文法

         capter2.基本的な文法

         capter3.関数

         capter4.文字列

         capter5.配列

         capter6.辞書

         capter7.セット

         capter8.オプショナル

         capter9.クラスと構造体

         capter10.列挙型

part3. 実践iOSアプリ開発

         capter11.ビュー

         capter12.主なUIパーツ

         capter13.ビューの管理

         capter14. オートレイアウト

         capter15.図形と画像

         capter16.アニメーション

         capter17.ジェスチャー

         capter18.データの永続化

         capter19.iOS端末の機能を使う

         capter20.Webから情報を取得する

全20章の構成になっています。

目次からもわかるようにSwift文法だけでなく、

実際のアプリ開発に使える技術も詰め込んであるよくばりな本です。

Xcodeが勝手にGit作ってくれる

まず最初に感動したのはXcodeでプロジェクトを作成する時、

Create Git repository on my Macにチェックを入れとくとgit initしてくれます。

新規プロジェクトの作成

細かいことですがこの辺教えてもらわないとなかなか気付けないので、個人的にかなりありがたかったです。

基礎がしっかり学べる

基礎文法のChapter2〜Chapter10ですが、かなりしっかり細かい部分まで説明されていてよかったです。

特に参考になったのはas演算子です。

今までの私の理解ではクラスをダウンキャストする時とかにつかってるやつみたいなイメージでした(ARKit使う時とか)

let numbers: [Any] = [1, 2, 3, 4, 4.4, 2.34]
var total = 0

for n in numbers {
	if let int = n as? Int {
		total += 1
	} else if let double = n as? Double {
		let rounded = round(double)
		print(rounded)
		total += Int(rounded)
	}
}

本書の中ではこのように記述されていました。

IntもDoubleもオブジェクトなのでクラスをダウンキャストしてる時とかと変わらないんですが、asは単なるキャスト演算子だと言うことがこの本を読んでわかりました。

asに関してはwebにもこれ以上わかりやすい説明ないと思います!

Masalaで役立った部分

実際にハッカソンで使えたのは、3章のデータ永続化の部分でした。

参考になりましたが、同時に最強のハマりポイントにもなってしまいました…

var fileURL: URL {
	let docsURL = FileManager.default.urls(
			for: .documentDirectory,
			in: .userDomainMask
			)[0]
			return docsURL.appendingPathCommponent("file.txt")
}

データの保存と取得しか記述されておらず削除について書いていなかったのでQiitaの記事を参考にしました。

削除以外にもファイルの存在確認などについても書いてあったので試したのですが、クロージャのところが非同期になってしまっているようでエラーを毎回キャッチしてしまっていました。

ブレイクポイントを貼ってディレクトリを確認しながら追加したり削除したらしっかり操作できてました。

追加と取得があるなら削除まで書いて欲しかったです…

Delegateをextensionするのかっこいい

本書を読んで一番感動したのがDelegateをextensionの中で記述するということでした。

extension ViewController: UITableViewDataSource {
	func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
			return items.count
		}
	func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
		//セルを作って表示する処理
		return cell
	}
}

これでViewControllerの中ではregisterするのとdelegateをしてするだけになるのですごい見通しがよくなっていいと思いました。

かっこいい書き方!

ちょっとダメなところ

いいところをあげましたが、ダメなところもあります。

StoryBordを使っている3章の部分で、画像を使いまわしているせいか間違いが多いです。

僕は幸いStoryBordを一切使わないマンなのであまり問題なかったのですが、本当の初心者の方が本を参考にしながら読み進めると絶対ハマるのでいい本なのにもったいないなーと思ってました。

まぁ、サンプルコードを全てgithabに上がっているのでそれを見れば解決できるのでそっちを参考にすれば読み進められるとは思います。

なにはともあれ、ハッカソン前にこの一冊を読んでおいてよかったです。

本来であればボコボコにされるところがボコくらいで済みました!