keitin / GithubAPIClient

0 stars 0 forks source link

「Swift実践入門」刊行記念 Tech Talks #1

Open keitin opened 7 years ago

keitin commented 7 years ago

Cookpad 西山さん

もともとはObjective-Cが好きだった。

Cookpadの海外版アプリをObj-CからSwiftに全書き換えを行った。 「男はだまって公式ドキュメント」 → 案外この言語難しそうだな。選択肢が多くでドキュメントを読んだだけでは使いこなすのは難しいかな

当初のコンセプト → 実践的なアプリをつくるための知識を載せよう。

言語仕様をしっかり理解しないと、間違った選択をしてしまう。 Swiftなのに、らしくないコードを書いてしまう

Ishkawaさんは後からジョインした。

iOSの話しをしてしまうと、UIKitなどの説明が必要になり、Swiftに特化できない。 最終的にAPIクライアントを作る事に。

執筆は辛いよ。カンヅメ状態つらし。

さらに先へ

keitin commented 7 years ago

実装クライアントサイド実装 Ishkawa

実践的モデリング - 入力フォームというエラーのかたまりを例に

入力は、「共通 <=> 多用」

フィールドって何?

名前と値を使っていてバリデーションが出来る。

struct  FormField {
    let name: String
    let value: Value

    func validation() throw {...}
}

バリデーションはフィールドの状態によって異なる。 インタフェースと実装を分ける必要がある プロトコルとジェネリックスを使おう。

protocol FormField {
    associatedType Value

    var name: String { get }
    var value: Value { get }

    func validation() {...}

これを構造体に準拠させる。

struct StringFormField: FormField {
    //プロパティとメソッドを実装する。
}

1.バリデーションを行う 2.値を取り出す この暗黙のルールを知らない人にとってはこわい

良い設計は、誤った用法をコンパルエラーにする

バリデーションと値を取り出す事を同時にやりたい。

フィールドのエラーとプロダクトをまとめる。

Formもprotocolにしよう。

それぞれのフォームのどれかがバリデーションに引っかかったらFormのバリデーションも失敗するようにする。 → どのフィールドで失敗したか知りたい → フィールドの識別子が必要 → Enumだ!!(enumとswitchは網羅性が高い) それぞれのフィールドをcaseに対応させる。

網羅性を利用できたが、惜しい

ハンドルすべきエラーがあることを知らないとこわい

buildProductの返り値をResult型にしちゃおう! -> Result<>

困ったら別の言語に聞いてみよう!

まとめ

誤ったコードはコンパイル時に分るように

5oya commented 7 years ago

ちゅぱっ

5oya commented 7 years ago

良い設計は誤った用法をコンパイルエラーにする!!

keitin commented 7 years ago

実践 Server Side Swift

Takeiさん

Server Side Swiftの使い所

開発環境を整える

Xcode8.2 コマンドラインを使ってプロジェクトを作成する。

Swift Package Manageを使う

パッケージ管理ツール(Apple公式) cocoapods的なやつ

Swiftで堅牢なWebアプリケーションをつくろう

Any型はやだ!

テーブルのカラムと対応したモデルをSwiftで作ってあげる。 Enumによるパターンマッチングはサーバーサイドでも有効 → HTTP Methodとかエラーマッチングとは

Optional型 → ぬるぽが減らせる

クライアントでメジャーなライブラリを積極的に使う

Ubuntsuで動くことを最優先に。 Macで動いてもLinuxで落ちるよ!まだSwiftが対応しきれていないよ。

GCDも使える! コンカレント→ 複数のスレッドで処理させる。 GCDで高速なWebアプリを作ろう!

keitin commented 7 years ago

Takei さん https://github.com/noppoMan