try! Swift 最速レポート 2日目午後 #tryswiftconf
try! swift 最速レポート 2日目午後
弊社のレポートは以下になります
- try! Swift 最速レポート 1日目午前
- try! Swift 最速レポート 1日目午後
- try! Swift 最速レポート 2日目午前
- try! Swift 最速レポート 3日目午前
- try! Swift 最速レポート 3日目午後
こんにちは!モバイルアプリ開発部の田中孝明です。
午前の部の田宮から引き続きお送りいたします。
目次
モダンCore Data
SwiftコンパイラとLLDBの連携
ライブラリの開発
Protocol-Oriented Programing in Networking
ライブデザイニング
SwiftらしいTable View Controllerの使い方
モダンCore Data
発表者:Daniel Eggert さん
- /objcの著者の方です
- 既存APIを利用してswiftコードを使ったCoreDataのアクセス方法を記述
- サンプルなどでよくみるコードはmodel名をStringで記載しているなどコンパイラが役に立たない
- reactiveなアプローチでコードを書くことができる
- ChangeEvent(Update / Delete)などもカプセル化する
- 用いる手段は以下のとおり
- Protocolを使う
- Protocol Extensionを使う
- 改善の対象について
- insertNewObjectForEntityForName
- predicate
- fetchRequest
- NSValueTransformer
- NSNotificationCenter
- 既存のAPIのスピリットを受け継ぎつつ、protocolでwrapperすることでコードの可読性をあげる
SwiftコンパイラとLLDBの連携
発表者:Novall Khan さん
- WWDC 15 のLLDBセッションを参照して記載
- LLDBの持っているコンパイラについて
- Clang
- Objective-C / C/C++向け
- Swift Compiler
- 本セッションはこちらにフォーカス
- Clang
- LLDB内のSwift Compiler完全に分かれたプロセスとして動作する
- SDK(UIApplication等)にもアクセスできる
- LLDBデバッグのコマンドについて
- expressionコマンドを使えばthrowされるexceptionのハンドリングが出来る
- breakpointは様々な応用が可能
- 特定のエラーをキャッチした時にブレークさせることができる
- Custom data formatter in swift
- デバッグ画面でデータ構造を見やすくすることでデバッグ効率をあげる
ライブラリの開発
発表者:Jeff Hui さん
- ライブラリを公開することで多くの人たちと繋がることができる
- より多くのdeveloperにインストールしてもらえるようにライブラリの品質を一定のレベル保たせる
- テストで保証する
- 様々なプラットフォームで検証する
- テストについて
- Travis CIがおすすめ
- Jenkinsと統合することもできる
- 様々なマトリクスビルドをすることもできる
- ymlファイル一つだけでいい
- Travis CIがおすすめ
- ライブラリを提供する際は3つのパッケージマネージャに対応するべき
- CocoaPods
- Podfileに依存性のあるライブラリを記述
- Certhage
- プロジェクトにマニュアルで組み込む方はこちら
- Swift package manager
- Linuxでのテストをサポート
- ただし、swift linuxはまだバージョンが安定していない
- CocoaPods
- バージョニングについて
- patch
- bugfixだけが入る
- minor
- 新しいfeatureが追加された
- オペレーションを変更するものではない
- major
- すべてが変わるもの
- semver.orgを参考に
- patch
- セッションでのライブラリ作成のサンプルはgithubにpushされています
Protocol-Oriented Programing in Networking
発表者:Yosuke Ishikawa さん
- APIKitの作成者の方です
- リクエストとレスポンスの型を紐付けることでリクエストの型さえ指定すればレスポンスを安全に取得できるようにする
- protocolのResponseTypeを定義
- typealiasで明示しておく
- protocolはフレキシブルなデフォルト実装が提供できる
- 型制約付きのextensionをレスポンスをデコーダブルに準拠させる
- PaginationViewModelをMVVMで実装する
- UITabelViewControllerをPaginationViewModelとしてUITableViewにバインドさせる
- Paginationは構造が変わらないのでジェネリクスなViewModelとして共通化できる
- 参考
- まとめ
- protocolはネットワーキングの抽象化に最適
- 方制約をつけると詳細な記述をすることができる
- イベントの流れも抽象化するとよい
ライブデザイニング
発表者:Maxim Cramer さん
- Sketchを使ってAppIconを作っていく方法を実演していただきました
SwiftらしいTable View Controllerの使い方
発表者:Chris Eidhof さん
- まずは一般的なSwiftでUITableViewControllerを作成
- playgroundをつかってUITableViewControllerを作成
- Itemに各要素
- Histor
- 徐々にSwiftのコードらしくクリーンにしていく
- structとジェネリクスでtableViewConfigrationを定義する
- tableViewConfigration
- tableViewConfigration
- Configrationをstructで作ることでコピーを簡単に作ることができる
- あらゆるところで再利用できる、テストのできるコードになる
- 強力なテクニックなので何度も活用している
- サンプルコード
まとめ
最前線のエンジニアの方々からコードベース(とくにライブコーディング)でのお話は勉強になりました。
と同時に自分への色々な宿題もでてきたので、非常に充実した1日でありました!
参加者の皆さまも非常に刺激的な1日になったのではないでしょうか!
明日も引き続き田宮と私田中でお送りいたします!