こちらの記事
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メソッドというのは紛らわしいネーミングではあります。