タグ

ブックマーク / blog.ishkawa.org (7)

  • Storyboardとの付き合い方 2018

    Aug 12, 2018 少し前に、自分のStoryboardの使い方をツイートしたら割と反応があったので、改めてまとめてみようと思います。これまで何年かiOSアプリの開発をしてきて、Storyboardとの付き合い方は何度も変わりました。なので、今回紹介するものはあくまで2018年現在のもので、来年には変わっているかもしれません。 説明のイメージを掴みやすくするため、画面の例を用意しました。左が編集時のStoryboardで、右が実行時のiOSシミュレーターです。具体的なトピックが出た時に、この例を説明に使うことがあります。 記事の最後にこれが動作するサンプルコードも用意しましたので、興味があればどうぞ。 Storyboardを使う目的 以下の2つを重視して、Storyboardを選択しています。 動作確認に掛かる時間を短縮する 成果物の構造を把握しやすくする ただし、Storyboar

    Storyboardとの付き合い方 2018
    Kiske
    Kiske 2018/08/13
  • iOSDCで「コード生成による静的なDependency Injection」について話した & 口頭原稿を公開

    Sep 18, 2017 このところかなり忙しく、iOSDCでちゃんとしたことを話せるのか不安でしたが、なんとか無事に終わりました。あまり会場を盛り上げることができず、後半はしどろもどろで死にたくなりましたが、面白かったと言ってくれた方もそれなりにいたので少し安心しました。 DIは今回の話以外にも色々なことに挑戦していて、最初はデフォルト引数を使った手動のinitializer injectionから始めて、SwinjectやCleanseなどのライブラリを試してみたり、Cake Patternを模倣してみたりしていました。それらを通じて、自分が求めるDIのプラクティスは 依存の宣言とインスタンスの取得のためのコードが単純かつ十分に少ない コンパイル時に依存関係の解決が検証される というものだとわかりました。もしも「dependencyの宣言さえしておけば、あとはコンパイルエラーを直してい

    iOSDCで「コード生成による静的なDependency Injection」について話した & 口頭原稿を公開
    Kiske
    Kiske 2017/09/20
  • iOSDCでRxSwiftを紹介してきた + ReactiveCocoaの補足

    Aug 23, 2016 オタクなのでRxSwiftの話になるとつい早口にアレコレ喋りまくってしまうのですが、今回はそういった気持ちをそっと胸にしまって、RxSwiftを導入するとアプリ開発にどういう変化が起こるのか、なるべく多くの方に伝わるように心がけて話しました。 スライド: http://blog.ishkawa.org/talks/2016-08-20-iosdc/ ビデオ: https://abemafresh.tv/tech-conference/32381 (1:00:00~) 3行で書くと以下の通りです。 RxSwiftはイベントストリームをObservableで抽象化するライブラリ 大抵のイベント処理はObservableからObserverへの接続で実装できる イベントストリームの依存関係はオペレーターから読み取れる その他、以下の3つについても話そうと思っていましたが

    iOSDCでRxSwiftを紹介してきた + ReactiveCocoaの補足
    Kiske
    Kiske 2016/08/24
  • Rxで1つ前の値を取得する

    Apr 19, 2016 Twitter for iOSには選択中のタブをもう1度タップしたら最上部までスクロールするという機能があります。便利ですね。 こういう機能を実装するには、1つ前に選択されていた値が何なのか知る必要があります。 桶の時代にはプロパティに前回の値を保存するのが定石でしたが、川の時代にはskip(1)してzip()するというのが定石です(たぶん)。 let tappedIndex: Observable<Int> = ... Observable .zip(tappedIndex, tappedIndex.skip(1)) { previousIndex, currentIndex in return previousIndex == currentIndex } .filter { $0 } .subscribeNext { _ in // 最上部までスクロール }

    Rxで1つ前の値を取得する
    Kiske
    Kiske 2016/04/21
    “川の時代”
  • Himotokiのdecodeが上手く書けなかったときの対処法

    public struct Event: Decodable { public let id: String public let createdAt: NSDate public let payload: Payload public static func decode(e: Extractor) throws -> Event { guard let typeObject = e.rawValue["type"] else { throw DecodeError.MissingKeyPath("type") } guard let typeString = typeObject as? String else { throw DecodeError.TypeMismatch(expected: "String", actual: "\(typeObject)", keyPath: "

    Himotokiのdecodeが上手く書けなかったときの対処法
    Kiske
    Kiske 2015/11/18
  • パターンマッチングでprepareForSegue(_:)のネストを浅くする

    Nov 14, 2015 1年前に書いたprepareForSegue(_:)がoptional bindingとtype castingの地獄になっていたので、パターンマッチングで描き直してみました。確かにネストは浅くなりましたが、これはこれで地獄なのかもしれません。 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { switch (segue.identifier, segue.destinationViewController, sender) { case ("Web"?, let viewController as WebViewController, let cell as UITableViewCell) where cell == feedbackCell: viewC

    パターンマッチングでprepareForSegue(_:)のネストを浅くする
    Kiske
    Kiske 2015/11/16
  • Vimの代わりとしてAtomを試してみた

    Aug 23, 2015 Vimに特に不満があったわけではないものの、新しいものも受け入れないとな〜と思ってセットアップしてみた。 Vim自体を辞めるつもりはないので、Atomはvim-modeで使っています。 メインの業務はXcodeかIntelliJ IDEAでやっていて、それぞれプラグインでVimのキーバインディングを割り当てています。 それ以外の以下のようなものには大体Vimを使っていました。 色んな設定ファイル Markdown Go Rust 自分が最低限使えるようにするまでにやったものを紹介します。 カーソルの履歴 AtomにはVimのノーマルモードのC-i, C-oにあたるものがなさそうだったのでt9md/atom-cursor-historyというプラグインで解決しました。 Vimっぽい動きが良かったので以下の設定を選びました。 'atom-text-editor.vim

    Vimの代わりとしてAtomを試してみた
    Kiske
    Kiske 2015/08/25
  • 1