try swift 2018 tokyo day 1 参加メモ

try swift 2018 tokyo 1日目の参加メモです。

裏 Swift Tour

発表資料

  • 以下の順で紹介
    • 値への代入
    • オプショナルな値への代入
    • Closure
    • enum
    • Never
    • inout
    • return
    • didSet
    • defer
    • init, deinit

以下、気になった点のみメモ

  • オプショナルな値への代入を使って、成功時のみ処理を実行する事ができる
    • (obj.v = 10)?.map { /* do */ }
  • int?にintを足し算できない。一度アンラップしなければならない。
    • 自前でint?にintを足し算するoperationを追加できる
  • Int!を使っているところでIntを使うテクニック
    • 初期値としてnil, 意味のないダミーの値ではなくクロージャを使って解決
    • クロージャはどんな型でもとれる
    • let a: Int = { fatalError() }()
  • inoutの挙動   - didSetがある変数を渡すとコピーが渡され、inoutの関数の最後に代入される   - didSetがない変数を渡すと参照が渡され代入される度に代入される
  • differ
    • initでの値設定ではdidSetが呼ばれないがdiffer内の変更は呼ばれる

SIL入門

niwatakoさんまとめ

  • Swift Compailerの開発の中で得た学びを共有
  • Swift Compailerの中のSILについて
  • なぜSILなのか
    • Swiftの型システムが学べる
    • いろいろな最適化が行われている
    • 楽しい

Clang モジュールの探検

niwatakoさんまとめ

  • Cocoapodsの開発者の発表
  • インポートとかモジュールマップに関する話
  • Ccoapodsの苦労が垣間見える

レスポンダチェーンを知ろう

niwatakoさんまとめ

関心の分離と単純化のためのSwiftコードの最適化

niwatakoさんまとめ

  • コードは書かれることよりも読まれる事のほうが多い
  • howからwhatを切り離す

関心の分離と単純化を行ったサンプルを紹介

  • 1,2: extensionの例
    • utf16.countが複数
    • 例えば3ヶ月後にわからなくなる
    • private extensionでurf16.countをどうして使っているのかの意図を明らかにする
  • 3,4: Autolayoutの例
  • 5: UITableViewの例
  • 6: UserDefaultsの例
  • 7: SafeAreaの例
  • 8: Viewの例
    • タップ領域を確保するViewクラスを用意した
  • 9: UIStackViewの例
  • 10: ViewControllerの例

コーダーがデザインすべきなのか

niwatakoさんまとめ

  • デザインとはどう機能するか
  • コンテキストの欠如を回避する必要がある
  • デザイナは考えないエッジケースをエンジニアが見つける
  • エンジニアとして技術的に何が可能化をチームメイトに理解させる手助けをすべき
  • ユーザはデザインに習慣化していく(ios標準のアラートなど)
  • 子供からは多くの質問が上がってくる、そのようは質問に全て応えられるようにすべき
  • 子供の視点を大切にすべき。未来はそうなっているかもしれない。
  • Appleの3例
    • 録画時のシャッター音を消す
    • Active Device
    • Face ID

Event driven networking for Swift

niwatakoさんのまとめ

変性のダイヤモンド

niwatakoさんのまとめ

  • Swiftの共変、反変の話

SwiftyPi

発表資料 登壇者のリポジトリ
niwatakoさんのまとめ

  • RaspberryPiでSwiftを使う話
  • Swiftがいろいろな環境で使えるようになってきた
  • OSを選ぶ。 Raspbianかubuntuがおすすめ
  • ラズパイをどう立ちあげるのか
  • Swft4.1のARMv7対応はまだ
  • Swift3.1.1をバイナリダウンロード
  • Swiftからpinを指定するにはGPIO番号を使う

我が家を支えるSwiftの技術

niwatakoさんのまとめ

使ってるサービスや技術

UI Test の楽しさとメリット

発表資料
niwatakoさんのまとめ

  • Trelloのエンジニア
  • コードのテストは簡単
  • UIのテストは難しい
  • たくさんのレベルがある。どこのテストを自動化するのか検討する。
  • XCUITestを採用することにした
    • 原因不明の失敗が20%発生するので導入はおすすめしない
  • kickstarterはUnitTestでほとんどテストできているのでUIテストを行っていない
  • 現状のTrelloのGOAL
    • smokeテストの自動化
    • MockAPI
    • Snapshot testing

ブロックチェーンのクライアントをSwiftで実装する

niwatakoさんのまとめ

  • ethereumはAppstoreのようなもの
  • objc or js で実装する
  • block chainはクライアント開発に向いている
    • web3.jsは、ReactNative or webKitを使う

Protocol Oriented WebAPI Abstraction

niwatakoさんのまとめ

👾

niwatakoさんのまとめ

  • Swiftでゲーム開発する話
  • Xcodeでゲーム開発環境は充実している
  • SpriteKitを使って開発
  • SpriteKitはSceneとNodeからなる。UIViewControllerとUIViewの関係のようなもの
  • GameplayKitにゲーム開発のデザインパターンがまとまっている
  • ゲームでrx
    • rxSpritekit

AST メタプログラミング

niwatakoさんのまとめ

  • Abstract syntax tree
  • SourceKitが生成したASTを使ったライブラリがいくつもある
  • ASTはSourceKitのものだけではない
    • SourceKit, SwiftKitten
    • swiftc -dump-parse, SwiftSyntax
    • swiftc -emit-syntax
    • swiftc -dump-ast
  • SoureceKitはc++。SourceKittenはswiftのラッパー
  • swiftc -dump-ast はすべての型情報が含まれている。ただパーサーはない。文字列出力のみ
  • swiftc -emit-syntax jsonフォーマット
  • SwiftSyntax ASTの生成から変更するAPIを提供している
  • SwiftSyntax, swiftc -dum-pastはspecがまだ固まっていない

Aspect Oriented Programing in Swift

  • レイアにまたがった処理の実装。ロギングなどに向いている
  • Swiftのbuildphaseをインターセプトする方法は用意されていない
  • コード生成して再ビルドする仕組みを作った
  • 作ったもの