のほほん停留所

日常、技術などざっくばらんに書きます

Swift

「最大でn回のイベントを発行する + Completeしない」Observableの作り方

RxSwiftを扱っていて、最大でn回のイベントを発行するCompleteしないObservableを使いたいときがある。例えば、API Call等の1回のみ行いたいタスクを行うために、下記の条件を満たしたObservableを扱いたい UIViewController.viewWillAppear(_:)に1回のみフ…

Swiftで複数のフラグを管理するためにOptionSetを使うと便利だった

サービスを作っているとき、ユーザーの状態(e.g. 課金)によって特定の機能が解放されていることがあります。それを管理するにはフラグのような仕組みを使って管理するのがよくある手段なのですが、それが複数になってしまうと管理のコストが高くなってしまい…

吹き出しのようなViewを作ってみる

下の画像の吹き出しのようなViewを作ってみます レンダリング用のProtocolを定義 吹き出しだけではなく、その他のレンダリングするような処理とも共通化したいので先にProtocolを定義しておきます // レンダリングのProtocol protocol Renderer { associated…

RxTestを使ったUI層のテスト

はじめに RxSwiftを最近触り始めたので、自分なりのUI層の設計とテストについて書きます。 RxSwiftのバージョンは3.0.1です。 基本的な設計 ViewController UserEventの通知 UIの反映 Presenter ViewControllerからUserEventを受け取る ViewModelに取得した…

UILabelの改行まとめ

UILabelの改行の種類をいつも調べてる気がするので備忘録代わりにまとめた let label = UILabel(frame: .zero) label.lineBreakMode = .byWordWrapping lineBreakModeの型であるNSLineBreakModeのドキュメントを見ると、改行方法は6種類ある NSLineBreakMode…

「Swiftデザインパターン」に出てきたパターンまとめ

「Swiftデザインパターン」をパラパラと読んだので、せっかくなので出てきたパターンをまとめてみた。基本的に概要と実装しか書いていないので、細かいところは書籍を参照していただければ。 https://www.amazon.co.jp/Swift-Programmers-SELECTION/dp/47981…

iOSでPDFを表示してみる メモ

iOSでPDFを表示する方法を知らなかったのでメモ書き //: Playground - noun: a place where people can play import PlaygroundSupport import UIKit import CoreGraphics class PDFView: UIView { var page: CGPDFPage? override func draw(_ rect: CGRect)…

potatotips #34にブログ枠で行ってきました

potatotips #34に行ってきましたので、気になったiOSに関する発表をいくつか抜粋してまとめました。 ブラウザアプリ「Smooz」を作る中で会得したWKWebviewのTips speakerdeck.com UIWebviewに比べてWKWebviewはクラッシュ率が下がりセキュリティが上がりまし…

Swift3: カリー化

Swift3ではカリー化用のシンタックスが廃止されました。廃止には用途が限定的などの理由が挙げられていますが、たまに使うことがあるのでSwift3での記法のメモ書きです。 英語ですが廃止の詳しい理由は0002-remove-currying.mdに書かれています。 // Swift2 …

Swift3: 同じ値を繰り返す文字列、配列

Swift3で同じ値を繰り返す文字列、配列のコンストラクタの記法が変わっていたため、個人的にメモしました。 // Swift 2.3 let str = String(count: 10, repeatedValue: Character("s")) // "ssssssssss" let arr = Array(count: 10, repeatedValue: "s") // …

「AKIBA.swift 第5回」に行ってきた

9/27(火)にクラスメソッド株式会社で開催されたAKIBA.swift 第5回に行ってきました。テーマは「フリートーク」ということで、Storyboardを駆使したUIの話からSwiftでサーバーサイドを書くなど多岐に渡っていました。メモ書き程度ですが、各発表をまとめさせ…