LoginSignup
0
0

More than 5 years have passed since last update.

NSObjectにRuby, Underscoreライクなtapのextension実装

Posted at

こちらの記事

Viewの初期化を末尾closureで与えて見やすくするためのextension
http://qiita.com/gamako/items/c83d4eeacda6c11a77ef

で教えてもらったライブラリDollar( https://github.com/ankurp/Dollar )の $.tap(function)というメソッド。

オブジェクトを引数にとれるfunctionを与えると、functionを実行して、そのオブジェクトを返してくれます。
初期化スコープの他にも、メソッドチェインに処理を挟みたいときに強力そうです。

元はunderscore.jsやLo-Dash由来だそうですが、どうやらさらに祖先はRubyのようです。
(さらにオリジナルがいるのかはわからず、、、)

Dollarライブラリは、すべて$クラスのクラスメソッドとして実装するポリシーの
ようなのですが、extensionで実装されたほうが便利そうなので、実装を考えてみました。

extensionはこちら

protocol Tappable : class {
}

extension Tappable where Self : NSObject {

    func tap(@noescape function: (Self) -> ()) -> Self {
        function(self)
        return self
    }
}

extension NSObject : Tappable {}
extension UIView : Tappable {}

使い方

UIViewの初期化時に使えます

let textLabel = UILabel().tap {
    $0.text = "タイトル"
}

ただし、NSObject系にしか使えませんので、他のクラスに使用したい場合はextension NSObject : Tappable {}を書いてもらう必要があります。

また、iOSターゲットだと、viewのtapメソッドというのは紛らわしいネーミングではあります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0