try! Swift 最速レポート 1日目午後 #tryswiftconf

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

弊社のレポートは以下になります

午前の部の加藤から引き続きお送りいたします。

try! Swift 最速レポート 1日目午後

こんにちは!朝のコーヒーが欠かせない田宮です!

今日はマークシティーからお届けしています!

Swift開発者たちの大規模なカンファレンス・try!swiftにやって来ました!!

今日から3日間開催されます。Developers.IOでは、この模様を随時お届けしていきます!このイベントでは世界中のSwiftデベロッパーが一堂に会しています。知識や技術を互いに共有し高め合うことを目的としています。

では、午後のセッションイッテミマショウ!

目次

Swiftのエラー処理についての三つの話

プロトコルと約束の地

文化を調和させる

Core Animation で作る高度なグラフィックス

スマートホームのためのコード

目に見えないものを学ぶ

Swiftのエラー処理についての三つの話

サンプルコード - Three Stories about Error Handling in Swift

発表者:Yuta Koshizawaさん

レポート

IMG_9355

Error Handling

  • エラーハンドリング in C
  • エラーハンドリング in Java
    • Complication Error が発生しがち
    • ! でエラーを無視
  • エラーハンドリング in Swift
    • オプショナル・ハンドリング
    • if let ~ else
      • Error handling lazily
  • シンタックスシュガー(糖衣構文)
  • オプショナル・チェインニング
  • 他の言語では扱えないような安全性を実現できる
  • Optionalは革命

Success or Failure

  • Alternatives of optionals
    • タプル
    • Union Types
    • Results
      • Results使用の難しさ
      • ネストが深いと可読性が低くなる
    • Error TypeなきResults
    • ResultK

try catch

IMG_9352

  • Automatic Propagation
    • 複数エラーをいっぺんに処理したい時に便利
    • マニュアルで処理すると、書くのが大変
  • Marked propagation
  • Marked Automatic Propagation for Optionals
    • nilは空の値としても取得出来る
  • Results と try
  • 非同期処理と try

プロトコルと約束の地

以前に行われた発表資料 - Swift Protocols and the Promised Land, with Michele Titolo - Realm is a mobile database: a replacement for SQLite & Core Data

発表者: Michele Titolo さん

レポート

IMG_9363

  • Swift is not Objective-C
  • as? as? as? 大変ですよね
  • @objcはウイルスのように広がる
  • @objc class Myclass: NSObject, SomeProtocol{}
  • can't conform, can't subclass (swift → Objective-C)

  • Bridging

  • ジェネリクスなど多くのものを Objective-Cに変換できない
  • 本当にObjective-Cに変換が必要か考えてみよう
  • use @import
  • 一部をbridging
  • もう一度、本当に Objective-Cに変換が必要か考えてみよう

IMG_9360

  • 型システム
    • プロパティはひとつの型のみを保持できる
    • Swiftらしく、ハックっぽい書き方
    • Can't override type with inheritance
    • 深い継承は問題がある
  • プロトコル
    • 敬称よりも、プロトコル同士の組み合わせでプログラミング
    • プロトコルと継承はミックスしないほうがいい
    • プロトコル思考をモックに活用
  • Generics
    • can't reference a generic protocol
    • generic non-NSObject have issues
  • Swift introduces awesome new patterns

文化を調和させる

発表者: Daniel Steinberg さん

レポート

IMG_9370

  • MVCモデル
  • Table View Controllerの例

immutable を意識する

  • クラスではなく、Struct でいこう
  • Struct は mutate される必要がある
    • let から var へ
  • mutatitng を 消してみる
    • もっと関数プログラミングっぽく
    • mutable なローカルコピーを作って、修正し、そのミュータブルなコピーを使った新しいインスタンスを新規に作成する
    • メソッドチェーンで書けるようになる

IMG_9368

  • Table View Controller から Data Source を外出しする
  • VCは DataSource をみる
  • プロトコル
    • SourceType に準拠した DataSource クラス
    • addNewItemAtIndex
    • deleteItemAtIndex
    • moveItem(fromIndex: Int, toIndex:Int) -> Self
  • SouceTypeではなくDataTypeを使用する
  • テンプレートパターン
  • サブクラス化を利用する
  • オブジェクト指向, 関数型プログラミング, プロトコル指向 を組み合わせた先に新しい世界がある

Core Animation で作る高度なグラフィックス

発表者: Tim Oliver さん

レポート

IMG_9377

コンテンツ

  • Core Animationの紹介
  • アニメーションの実装方法
  • CALayerのサブクラスの利用方法

Core Animationの紹介

  • UIKitより下のレベル
    • UIViewと深くつながっている
    • 動作はGPUに転送
  • レイヤー・オブジェクトの階層

  • なんでCoreAnimation?

    • iOSのグラフィックシステムをより理解できる
    • 60fpsをもっと簡単に目指せる
    • UIViewのAPIよりもっと綺麗に、もっと複雑にアニメーションさせられる
    • 結果としてアプリが他よりも良い物に出来る
  • CoreGraphicsとのちがい
    • 画像を作成するAPI
    • 完全にCPUで実行
    • 前の世代のデバイスでは、非常に遅い処理に
    • Core Animation と組み合わせたら、かなりいい!
    • Paint Code で Core Graphics の画像を作る

アニメーションの実装方法

IMG_9375

  • CALayer
    • プロパティが UIViewで表されている
    • frame は CALayerのposition と bounds プロパティに変換される
    • Tweetbot風の、縦に画像要素が伸びるエフェクトの実現も出来る
    • 画像の拡大
    • マスク合成
    • シャドウをつける
    • Transform
      • Flipboardのアニメーション
    • revealapp
  • イージング
    • http://cubic-bezier.com
  • CAAnimationGroup
  • Animation Completion Handling
  • Core Animator on the Mac App Store

CALayerのサブクラスの利用方法

  • GPUで実行する特別なエフェクト
  • CATileLayer
    • 様々なサイズで画像を再レンダリング
    • PDFやSVG画像でよく使われる
  • CAGradientLayer
    • GPUでグラデーション描画
  • CAReplicaterLayer
    • GPUでひとつのレイヤをいくつもコピーして描画
  • CAShapeLayer
    • CGPathからいろいろな形を表示させ、アニメーションさせられる
  • CAEmitterLayer
    • パーティクル
  • Other Layer Subclass
    • UILabelと同じように、CATextLayer
    • 大きなコンテンツをスクロールする、CAScrollLayer
    • 完全な3D変換を実現するCATransformLayer
    • ゲームのための、CAEAGLLayerなど

結論

  • UIならCALayer
  • ちゃんと使えば、60FPSでカッコイイエフェクト
  • けっこう大変なので、最初はUIKitからがオススメ

スマートホームのためのコード

発表者: Stephanie Shupe さん

レポート

IMG_9382

  • Smart Technology + Home なプロダクトは沢山
    • 時計、コーヒーメーカー、証明、トイレ、etc.
  • HomeKitは、Appleのフレームワークで、同じプロトコルで家の中のすべての物を繋げて通信させられる

  • 照明

  • HMHome
    • HMRoom
    • HMUser
    • HMAccessory
      • HMService
        • HMCharacteristic
          • Characteristicは読み書き可能
            • 状態、明るさ、Saturation、他
        • HMHomeManager
        • HMHomeDelegate
  • 照明をHomeKitでコントロール
    • アプリに、Light Bulb Switchを追加
    • ライトがONか監視
    • ライトの状態を監視
  • HMHomeManagerをイニシャライズ。デリゲートを設定
  • 各種メソッド・デリゲートメソッドを実装
  • Characteristicから値を読み込む
  • 他の誰かがライトをつけたり消したら?
    • ライトを監視しましょう
    • デリゲートメソッドで解決
    • イベントの通知が来る
    • rawValueも取れる
  • デモ
    • Siriに「ライトを赤くして」というと、その色になる、などのデモ
    • 明るさは、iPhoneの画面で調整可能
  • HomeKit Accessory Simulator!
  • Philips Hue
    • www.meethue.com
    • Pholips Hue App

質疑応答

IMG_9381

  • HomeKit の未来
    • 全く新しいアクセサリが出てくる可能性はもちろんあるし、Appleがそれを用意する可能性ももちろんある
  • セキュリティはどう実現している?別の人が使わないように
    • iCloudと紐付いている。Appleがセキュリティをコントロールしており、その範囲内で十分セキュアだと思う
  • iCloudと電話を使って外からデバイスをコントロール
    • サーバーのコードやSDKを使えばできるのでは

目に見えないものを学ぶ

発表者: Cate Huston さん

レポート

IMG_9389

  • Digital crack
  • 没頭させる、人を引き込む
  • 中毒性のあるもの
  • どれくらいアプリにユーザーがお金をかけるかだけでなく、もちろん、利用者に取ってどんな意味があるかが重要
  • SHOW & HIDEアプリ
    • ポストカードをイメージした写真加工アプリ
  • バックグラウンドでの位置情報の取得
    • 5分毎のアップデート
    • 位置情報精度
    • iOSの位置情報のAPIで、詳細に取ろうと思うと、1時間でバッテリー切れ
    • 必要ないときは、バッテリーを節約。位置情報をキャッシュ
    • これらを駆使して、アプリを、ユーザーから意識させないことが出来た
  • 3Dプリンターや、人物キャプチャーを使った、様々な高価なデバイスを使った体験をモバイルに持ち込みたいと思った
  • データではなく決定事項を見せていく
    • 例えば天気予報
      • 重要なのは、じゃあ何を着ようかとかの、意思決定
    • 例えば位置情報など
      • 交通情報に変換して、渋滞をみて、どのルートを使って目的地に行くかを決定する
  • Foursquare

IMG_9392

  • 行動のパターンを、アプリによってかえられている自分に気づいた
  • しかしながら、中毒化はせず、Digital Crackではない

  • Slackの例

    • 新しいデジタルインターフェイスに、連れて行ってくれる
    • botsが行動パターンを変えてくれる
    • 人が話すように、コンピュータも話すことが大事
    • エラーメッセージは、人間が分かりやすいよう、ユーザーが何をしたいか(操作の文脈)に着目する
  • UX
    • MAN VS MACHINE
    • 映画に出てくる、言葉を話すコンピュータはまだまだ夢

感想

一日目から、とてもエキサイティングで、もうSwiftなしでは生きられない体になってしまいそうです!! 明日は、僕と、田中孝明が引き続きお届けします!!