SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
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. UILabel や UITableView など標準なクラスを拡張して作られている
5. ジェネリクスや拡張などSwift の良い機能を使いまくっている
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 bindTo<B : BindableType where B.Element == Optional<EventType>>
(bindable: B) -> DisposableType
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
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.
*
* @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)
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!

Weitere ähnliche Inhalte

Was ist angesagt?

ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会yohei sugigami
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようdcubeio
 
LightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkLightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkYoshifumi Kawai
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3Kazuchika Sekiya
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返るYuta Matsumura
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby CocoaTomoki Maeda
 

Was ist angesagt? (6)

ReactNativeを語る勉強会
ReactNativeを語る勉強会ReactNativeを語る勉強会
ReactNativeを語る勉強会
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
LightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkLightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST Framework
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
改めて C# でできることを振り返る
改めて C# でできることを振り返る改めて C# でできることを振り返る
改めて C# でできることを振り返る
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 

Ähnlich wie Swift bond コードリーディング

みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」techtalkdwango
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介NilOne Ltd.
 
Intalio Object Builder vs Microsoft LightSwitch
Intalio Object Builder vs Microsoft LightSwitchIntalio Object Builder vs Microsoft LightSwitch
Intalio Object Builder vs Microsoft LightSwitchDaisuke Sugai
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみたMotoki Narita
 
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったことAndroidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったことShuichi Takaya
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)Yasuhiko Yamamoto
 
Swiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからSwiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからRyo Kasama
 
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜kusukawa
 
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Roy Kim
 
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門Yasuhiko Yamamoto
 
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術Yu Nobuoka
 
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォームDaichiKimura3
 
Meteorというフレームワーク
MeteorというフレームワークMeteorというフレームワーク
Meteorというフレームワークrukiadia
 
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6yo_waka
 

Ähnlich wie Swift bond コードリーディング (20)

みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
 
Reactive
ReactiveReactive
Reactive
 
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介中規模Androidアプリ開発の過程に生じた問題と対策の紹介
中規模Androidアプリ開発の過程に生じた問題と対策の紹介
 
Android0422
Android0422Android0422
Android0422
 
Intalio Object Builder vs Microsoft LightSwitch
Intalio Object Builder vs Microsoft LightSwitchIntalio Object Builder vs Microsoft LightSwitch
Intalio Object Builder vs Microsoft LightSwitch
 
Swift bondさわってみた
Swift bondさわってみたSwift bondさわってみた
Swift bondさわってみた
 
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったことAndroidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
Androidハイブリッドアプリを約2年間メンテンナンスしてきて分ったこと
 
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
わんくま名古屋 #37 (20151114) Windows 10 UWP アプリ開発入門(実践編)
 
Swiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれからSwiftから考えるアプリ開発のこれから
Swiftから考えるアプリ開発のこれから
 
React.js + Flux
React.js + FluxReact.js + Flux
React.js + Flux
 
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
小さな自動化から始める快適お仕事生活〜ラズパイ+Node-REDでローコードに自動化しよう〜
 
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
Swiftで説明する「モナド」:Swiftにおける関数型プログラミングの使い方
 
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
わんくま名古屋#36 (20150725) Windows 10 ユニバーサル Windows アプリ開発入門
 
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
 
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
決済システム内製化に向けたプラットフォーム構築 - PCF・BOSHによるオブザーバブルプラットフォーム
 
Meteorというフレームワーク
MeteorというフレームワークMeteorというフレームワーク
Meteorというフレームワーク
 
DevLOVE iPhoneアプリ勉強会
DevLOVE iPhoneアプリ勉強会DevLOVE iPhoneアプリ勉強会
DevLOVE iPhoneアプリ勉強会
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6Android meets RxJava - 渋谷Java#6
Android meets RxJava - 渋谷Java#6
 

Kürzlich hochgeladen

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Kürzlich hochgeladen (12)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Swift bond コードリーディング