読者です 読者をやめる 読者になる 読者になる

try! Swift SwiftらしいTable View Controllerの使い方 #tryswiftconf Day2-11

try! Swift 2016

Chris Eidhof

ドイツ・ベルリンに住むオランダ人のソフトウェア開発者です。iOS/Macアプリ開発を中心に活動しており、DecksetやSceneryを開発しています。UIKonfやobjc.ioの立ち上げ、Functional Programming in Swift, Advanced Swift(現在、執筆中)の著者でもあります。

twitter.com

この講演ではよりSwiftらしいTable View Controllerの使い方を探ります。ジェネリクスやStruct、再利用可能なUITableViewControllerのサブクラスを作る関数などについて話します。

TableViewの話をします。

f:id:niwatako:20160303173735j:plain f:id:niwatako:20160303173744j:plain f:id:niwatako:20160303173827j:plain

テーブルビューにイニシャライザが必要

f:id:niwatako:20160303173938j:plain f:id:niwatako:20160303174017j:plain

シンプルなテーブルビューが出来ました。

違い表示をしたい場合

Styleを変えます f:id:niwatako:20160303174045j:plain

そしてここにプロパティを加えてイニシャライザに与える f:id:niwatako:20160303174139j:plain

ここで受け渡す f:id:niwatako:20160303174127j:plain

オブジェクト指向に慣れていたらこれでもいいかな、itemを渡してConfigurationしてもらう f:id:niwatako:20160303174210j:plain

あるいはこうして f:id:niwatako:20160303174303j:plain こうする f:id:niwatako:20160303174341j:plain Subtitleにしてもいいね f:id:niwatako:20160303174358j:plain

ポケモンを見せたいならGenericsを使います。 PersonをItemに書き換えていきます f:id:niwatako:20160303174448j:plain f:id:niwatako:20160303174501j:plain f:id:niwatako:20160303174521j:plain f:id:niwatako:20160303174532j:plain

Editを加える f:id:niwatako:20160303174645j:plain f:id:niwatako:20160303174657j:plain この時点でPlaygroundを使うのをやめましょう。ここをFix出来ます。 f:id:niwatako:20160303174717j:plain

新しいXcodeではインタラクティブに出来ますが、今回は別のプロジェクトに移す必要があります。AppDelegateに持っていいます。動くでしょうか? f:id:niwatako:20160303174812j:plain

Editingを実行するにはDeletionだけ実装します。デリーとかチェックして f:id:niwatako:20160303174840j:plain まだ落ちますね f:id:niwatako:20160303174908j:plain

TableViewをアップデートする必要があります。 f:id:niwatako:20160303174927j:plain f:id:niwatako:20160303174936j:plain f:id:niwatako:20160303174942j:plain

Undo

f:id:niwatako:20160303174951j:plain

UndoHistoryはGenericsです。 f:id:niwatako:20160303175020j:plain 変更したらArrayに入れます f:id:niwatako:20160303175028j:plain

これで使えます

使ってみましょう f:id:niwatako:20160303175126j:plain アイテムを計算型で定義 f:id:niwatako:20160303175147j:plain f:id:niwatako:20160303175105j:plain

f:id:niwatako:20160303175302j:plain f:id:niwatako:20160303175309j:plain Hsitoryが変わったらリロードが必要ですね

Undo f:id:niwatako:20160303175347j:plain バーからUndoを呼べるように f:id:niwatako:20160303175408j:plain

機能するようになった f:id:niwatako:20160303175429j:plain

Structであることでこのようになる。

クリーンアップしましょう f:id:niwatako:20160303175455j:plain DidSetにもっていきます f:id:niwatako:20160303175507j:plain

CanUndoをつくって戻せる時だけ戻るボタンを表示する f:id:niwatako:20160303175526j:plain

ここをシンプルにしたい f:id:niwatako:20160303175602j:plain f:id:niwatako:20160303175646j:plain f:id:niwatako:20160303175708j:plain f:id:niwatako:20160303175731j:plain この設定を外に出しましょう f:id:niwatako:20160303175752j:plain テストが出来て再利用が出来ます。

もう少し出来るのは、configがライブラリに入っていたら、それはコピーしてアプリの中で変えられます。structなので簡単にコピーを作れます。 f:id:niwatako:20160303175832j:plain

再利用できてテストの出来るコードになりました。

コードは以上です。皆さんに考えていただきたいのは、利用できるなら、Generics、structによってシンプルに出来るということです。

コードは公開されますか?

(※なんと再現された方が!)

ドーン、というエフェクトは何を使っていますか?

Timにインスピレーションを受けて昨晩作りました

gist.github.com

f:id:niwatako:20160303180145j:plain

他にも例がありますか?一般化やConfigを切り出す方法は

ネットワーキングが好きな例です。パリで発表した時に今日の半分で終わったが、前半でネットワーキングが入っていた。APIJSONをパースして...というもので、structを使っていて非同期コードが一つの場所に入っていてテストが簡単にできた

マジックキーボードのショートカットはなんでしたか?

Cntrol Option Command F : Fix All IN Scope f:id:niwatako:20160303180444j:plain

今回のViewControllerはStoryboardで使えないと思う、Genericsだから。こういうパターンを使うとStoryboardやSegueだと方が消えるのでSwiftに向いていないのでしょうか

とても良いポイント。Storyboardを使ってアプリを作りました。気に入っていましたが、Storyboardで使うことも出来ます。もう一つサブクラスを作ります。MyTableViewControllerをFinalにしなければサブクラスはGenericsではありません。それが一つの可能性です。

ですが、Storyboardを使う回数は減ってきました。ロジックをViewControllから出すのは良いと思っています。そのメリットはStoryboardより大きいと思います。

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!