Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Swift Bond
コードリーディング
2015.11.05 中原瞬
アジェンダ
● Reactive Programing とは
● Swift Bond とは
● Swift Bond のよく使うメソッド
● observe
● EventProducer
● Swift Bond を読んで気になった実装を紹介
Reactive Programming とは...
時間や外部の入力とともに変化する値や計算を、ユーザ自身がプログラムするのでは
なく、システム(言語自体やライブラリ)がユーザからは見えないところで反応(reactive)
してくれるというも...
print される値は?
var a = 1
var b = a + 1
a = 10
print b
bに直接値を代入する処理を書いていないが
a の値を変えることで bの値も間接的に書きかわる
var a = 1
var b = a + 1
a = 10
print b → 11
Swift Bond は...
1. UI オブジェクトと ViewModel を繋いでデーターのやりとりをしてくれる
2. 繋いだデーターは Reactive な振る舞いを行ってくれる
3. 関数型プログラミングをサポート
4. UILabe...
Swift Bond のよく使うメソッド
bindTo
EventProducerType:bindTo
※オブジェクトから作用させたいオブジェクトをbind したい時に利用する
例)動的に値が変わった時に、入力欄も更新
bidirectionalBindTo
EventProducerType:bidirectionalBindTo
※双方向に bind したい時に利用する
例)動的に値が変わった時に、入力欄も更新
その逆の、入力欄の値をユーザーが書き換えたら...
observeNew
EventProducerType:observeNew
※データが更新された時に変更の値で何か処理を行いたい時に使用
例)動的に値が変わった時に、エラーチェックなどを行いたいなど
Swift Bond を読んで気になった実装
今回の内容を実装に組み込んだら
かっこいいwww?
bindToってどういう仕組みになっているん?
loginModel.userName.bindTo(userNameTextField.bnd_text)
この一行を調べていたら、
いくつかの実装を発見!!
Wheres
public func bindTo<B : BindableType where B.Element == EventType>
(bindable: B) -> DisposableType
public func bindT...
Phantom Type
public func bindTo<B : BindableType where B.Element == EventType>
(bindable: B) -> DisposableType
public func...
NSRecursiveLock
複数スレッドから非同期でアクセスされた時に、同時アクセスをブロックしてくれる。
(排他制御処理)
NSRecursiveLock
処理を囲むことで、スレッドセーフな処理を簡単に切り出すことができる。
NSRecursiveLock
private let lock = NSRecursiveLock(name: "com.xxx.yyyy")
...
lock.lock()
...
lock.unlock()
objc_setAssociatedObject / objc_getAssociatedObject
既存のクラスを継承せずに、クラスに値(機能)を追加することができる。
objc_setAssociatedObject
/**
* Sets an associated value for a given object using a given key and association policy.
*
* @...
objc_getAssociatedObject
/**
* Returns the value associated with a given object for a given key.
*
* @param object The sou...
Swift bond コードリーディング
Upcoming SlideShare
Loading in …5
×

Swift bond コードリーディング

696 views

Published on

Swift Bond どのようになっているか簡単に覗いてみました。

Published in: Technology
  • Be the first to comment

Swift bond コードリーディング

  1. 1. Swift Bond コードリーディング 2015.11.05 中原瞬
  2. 2. アジェンダ ● Reactive Programing とは ● Swift Bond とは ● Swift Bond のよく使うメソッド ● observe ● EventProducer ● Swift Bond を読んで気になった実装を紹介
  3. 3. Reactive Programming とは... 時間や外部の入力とともに変化する値や計算を、ユーザ自身がプログラムするのでは なく、システム(言語自体やライブラリ)がユーザからは見えないところで反応(reactive) してくれるというものです。
  4. 4. print される値は? var a = 1 var b = a + 1 a = 10 print b
  5. 5. bに直接値を代入する処理を書いていないが a の値を変えることで bの値も間接的に書きかわる var a = 1 var b = a + 1 a = 10 print b → 11
  6. 6. Swift Bond は... 1. UI オブジェクトと ViewModel を繋いでデーターのやりとりをしてくれる 2. 繋いだデーターは Reactive な振る舞いを行ってくれる 3. 関数型プログラミングをサポート 4. UILabel や UITableView など標準なクラスを拡張して作られている 5. ジェネリクスや拡張などSwift の良い機能を使いまくっている
  7. 7. Swift Bond のよく使うメソッド
  8. 8. bindTo EventProducerType:bindTo ※オブジェクトから作用させたいオブジェクトをbind したい時に利用する 例)動的に値が変わった時に、入力欄も更新
  9. 9. bidirectionalBindTo EventProducerType:bidirectionalBindTo ※双方向に bind したい時に利用する 例)動的に値が変わった時に、入力欄も更新 その逆の、入力欄の値をユーザーが書き換えたらシステム上の値を更新
  10. 10. observeNew EventProducerType:observeNew ※データが更新された時に変更の値で何か処理を行いたい時に使用 例)動的に値が変わった時に、エラーチェックなどを行いたいなど
  11. 11. Swift Bond を読んで気になった実装
  12. 12. 今回の内容を実装に組み込んだら かっこいいwww?
  13. 13. bindToってどういう仕組みになっているん? loginModel.userName.bindTo(userNameTextField.bnd_text)
  14. 14. この一行を調べていたら、 いくつかの実装を発見!!
  15. 15. Wheres public func bindTo<B : BindableType where B.Element == EventType> (bindable: B) -> DisposableType public func bindTo<B : BindableType where B.Element == Optional<EventType>> (bindable: B) -> DisposableType
  16. 16. Phantom Type public func bindTo<B : BindableType where B.Element == EventType> (bindable: B) -> DisposableType public func bindTo<B : BindableType where B.Element == Optional<EventType>> (bindable: B) -> DisposableType
  17. 17. NSRecursiveLock 複数スレッドから非同期でアクセスされた時に、同時アクセスをブロックしてくれる。 (排他制御処理)
  18. 18. NSRecursiveLock 処理を囲むことで、スレッドセーフな処理を簡単に切り出すことができる。
  19. 19. NSRecursiveLock private let lock = NSRecursiveLock(name: "com.xxx.yyyy") ... lock.lock() ... lock.unlock()
  20. 20. objc_setAssociatedObject / objc_getAssociatedObject 既存のクラスを継承せずに、クラスに値(機能)を追加することができる。
  21. 21. objc_setAssociatedObject /** * Sets an associated value for a given object using a given key and association policy. * * @param object The source object for the association. * @param key The key for the association. * @param value The value to associate with the key key for object. Pass nil to clear an existing association. * @param policy The policy for the association. For possible values, see “Associative Object Behaviors.” * * @see objc_setAssociatedObject * @see objc_removeAssociatedObjects */ @available(iOS 3.1, *) public func objc_setAssociatedObject( object: AnyObject!, _ key: UnsafePointer<Void>, _ value: AnyObject!, _ policy: objc_AssociationPolicy)
  22. 22. objc_getAssociatedObject /** * Returns the value associated with a given object for a given key. * * @param object The source object for the association. * @param key The key for the association. * * @return The value associated with the key e key for e object. * * @see objc_setAssociatedObject */ @available(iOS 3.1, *) public func objc_getAssociatedObject(object: AnyObject!, _ key: UnsafePointer<Void>) -> AnyObject!

×