yujiro's blog

「インターネット上で正しい答えを得る最善の方法は、質問することではない。間違った答えを投稿することだ」by ウォード・カニンガム

RxJava での購読解除はuber のAutoDisposeを使ったほうが良さそう、という話

現在、仕事場のAndroid のコードでは2種類の購読解除方法を使っている

1つめは、bindToLifeCycle、bindUntilEvent を使う方法

single
    .compose(bindToLifeCycle())
    ...

もう一つは、Autodispose を使う方法

https://github.com/uber/AutoDispose

single
    .as(AutoDispose.autoDisposable(RxLifecycleInterop.from(this).requestScope()))
    ...

※ 実際にはPresenter で購読開始するので、view を引数に渡している事が多い。

続きを読む

Swift でprivate なプロパティを書き換える

小ネタです。

ユニットテストを書いているとき、テスト対象のprivate なインスタンス変数を書き換えたいと思うことがあります。

標準のリフレクションだと結構面倒くさいことになります。

詳しくは、https://stackoverflow.com/questions/31589405/using-reflection-to-set-object-properties-without-using-setvalue-forkey をご参照ください。

上記のStackoverflow でも紹介されていますが、Runtime というライブラリを使うと簡単になるみたいです。

    class Hoge {
        private var flag: Bool = false

        func printFlag() {
            print(flag)
        }
    }

    func testHoge() {
        var h = Hoge()
        let info = try! typeInfo(of: Hoge.self)
        let property = try! info.property(named: "flag")
        try! property.set(value: true, on: &h)
        h.printFlag()
    }

=> true

簡単です。

iOSアプリにクリーンアーキテクチャをいれてみた

この記事では、iOSアプリで実際にクリーンアーキテクチャを取り入れてみた例を紹介します。

クリーンアーキテクチャが何か、というところについてはここでは割愛します。

定義・前提等の全体感は省略させていだき、iOSアプリに取り入れる上で必要なクリーンアーキテクチャの知識は触れられればと思っています。

構成

まず、全体の構成要素は以下になりました。

図1 f:id:bambookun:20191104201001p:plain

続きを読む

クロスサイト・スクリプティング(XSS)

はじめに

この記事の内容は 「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版」 の第4章3節の要点をまとめたものです。

www.sbcr.jp

※ 基本的に引用は避けています。

続きを読む

【Alamofire 実践】Router の使い方とその問題点、URLRequestConvertible について

今回はAlamofire の実践編ということで、もう少し踏み込んだAlamofire の使い方を書いていこうと思います。

前回記事 : 【Swift】Alamofire を使って色んなリクエストを投げてみる - yujiro's blog

Alamofire を実際に使う際、エンドポイントの管理にはURLRequestConvertible というprotocolを継承した、Router という名前の enum を作って管理することが多いです。

このRouter はどう使うんでしょうか

続きを読む

【Swift】Alamofire を使って色んなリクエストを投げてみる

iOSでHTTPリクエストをする際によく使われるAlamofire の使い方を紹介します。

Alamofire は HTTPリクエストをするのにrequest, download, upload メソッドが用意されています。

今回はこれらの基本的な使い方について紹介しようと思います。

続きを読む