SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
SwiftBondでつなげてプログ
ラミング
山本たかし
自己紹介
もともとPHP/Javaエンジニア
 ↓
3ヶ月前から急遽iOSエンジニアに転向
facebook:
https://www.facebook.com/p.t.yamamoto
linkedIn: http://www.linkedin.com/pub/%E8%B2%B4%E5%A3%AB-%E5%B1%
B1%E6%9C%AC/57/266/7ba
ソースについて
https://github.com/paul-yamamoto/BondExample/
https://github.com/paul-yamamoto/YahooRSS/
SwiftBondとは
● UI部品を拡張して扱いやすくするライブラリ
● TextField label などのデータをつないでくれる。
● 関数型プログラミングをサポート
https://github.com/SwiftBond/Bond
インストールはcocoapods が簡単
pod 'Bond', '~> 3.0'
‘->>’だけでつながる
self.textfield ->> self.label
‘<->> ‘と ‘->|’ もある
class ViewController: UIViewController,
UITextFieldDelegate {
@IBOutlet var textfield : UITextField
@IBOutlet var label : UILabel
override func viewDidLoad() {
super.viewDidLoad()
self.textfield.addTarget(self
action:@selector(textFieldDidChange:)
forControlEvents:UIControlEventEditingChanged)
}
func textFieldDidChange(id:sender) {
self.label.text = self.textfield.text
}
}
class ViewController: UIViewController {
@IBOutlet var textfield : UITextField
@IBOutlet var label : UILabel
override func viewDidLoad() {
super.viewDidLoad()
self.textfield ->> self.label
}
}
普通に実現する場合は、
textfieldの状態を監視する処理を入れる必要がある
つなぐ時に処理をはさむ
self.textField.dynText.map { "フィールドの値は " + $0 }
->> self.label
mapは何を返しても良い
let nameValid = name.dynText.map{countelements($0) > 6}
let passValid = pass.dynText.map{countelements($0) > 6}
loginButton.dynEnabled
= reduce(nameValid, passValid){$0 && $1}
reduce(name.dynText, pass.dynText) {
return countElements($0) > 6 && countElements($1) > 6
} ->> loginButton.dynEnabled
Dynamic型の処理は繋げて実行できる
number.filter { $0 > 10 }.map { "($0)" } ->> label
肝は Dynamic<T>型
var myString:Dynamic<String>
myString ->> self.label
Dynamic型で使える関数型言語機能
func map<T, U>(dynamic: Dynamic<T>, f: T -> U) -> Dynamic<U>
Dynamic(配列)型を関数を使い他の Dynamicに変換する
func filter<T>(dynamic: Dynamic<T>, f: T -> Bool) -> Dynamic<T>
Dynamic(配列)型を関数を使い条件に一致するものだけ取り出す
func reduce<A, B, T>(dA: Dynamic<A>, dB: Dynamic<B>, f: (A, B) -> T) -> Dynamic<T>
Dynamic(配列)型を関数を使い一つの Dynamic型に集約する
配列の操作も便利
lazy var loginButtonTapListener = Bond<UIControlEvents>() { event in
// ログイン処理
}
loginButton.dynEvent.filter(==, .TouchUpInside) ->> loginButtonTapListener
TableにはUtilityクラス
self.tableViewDataSourceBond = UITableViewDataSourceBond(tableView: self.tableView)
self.news = DynamicArray([])
….
self.news.map { (entry: AnyObject) -> UITableViewCell in
let result:NSDictionary = entry as NSDictionary
let cell = (self.tableView.dequeueReusableCellWithIdentifier("cell") as? ListViewCell)!
let title:Dynamic<String> = Dynamic(result["title"] as String)
title ->> cell.label
return cell
} ->> self.tableViewDataSourceBond
cellForRowAtIndexPathとか
numbersOfRowinSectionとか必要なし!
Tableの状態を気にせず処理を書ける
どういう使い方が良いのか?
状態にごとに処理を書くのでなく、
データをつないで処理を書く。
状態がある → 条件分岐がある → バグの元
どうやって実装してるの?
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
println("Step (newTotalSteps) が追加されます! ")
}
didSet {
println(" (oldValue) Stepが変更されました! )
  println("今は (totalSteps)")
}
}
}
propertyObsever 使ってます!
詳しくは
http://five.agency/solving-the-binding-
problem-with-swift/
https://github.com/SwiftBond/Bond-Demo-
App/

Weitere ähnliche Inhalte

Was ist angesagt?

達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
masayoshi takahashi
 

Was ist angesagt? (20)

Bot frameworkでbot入門
Bot frameworkでbot入門Bot frameworkでbot入門
Bot frameworkでbot入門
 
Xcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhiosXcode グループとフォルダー参照 #yhios
Xcode グループとフォルダー参照 #yhios
 
20200714 cogbot
20200714 cogbot20200714 cogbot
20200714 cogbot
 
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
Fukuoka.NET Conf 2018: 挑み続ける!Dockerコンテナによる ASP.NET Core アプリケーション開発事例
 
Blazor Server テンプレート解説
Blazor Server テンプレート解説Blazor Server テンプレート解説
Blazor Server テンプレート解説
 
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよSwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
 
Bot Framework で会話のログを取る
Bot Framework で会話のログを取るBot Framework で会話のログを取る
Bot Framework で会話のログを取る
 
JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2
JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2
JSRelでlocalStorageを使って 完全オフラインなブラウザアプリ@JSおじさん #2
 
WS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたしWS2012R2本とキティさんとわたし
WS2012R2本とキティさんとわたし
 
TypeScript x Bot Framework
TypeScript x Bot FrameworkTypeScript x Bot Framework
TypeScript x Bot Framework
 
Bot framework概要
Bot framework概要Bot framework概要
Bot framework概要
 
WebAPIのこれまでとこれから
WebAPIのこれまでとこれからWebAPIのこれまでとこれから
WebAPIのこれまでとこれから
 
ノビィ取扱い説明書
ノビィ取扱い説明書ノビィ取扱い説明書
ノビィ取扱い説明書
 
Microsoft learnご紹介vol2
Microsoft learnご紹介vol2Microsoft learnご紹介vol2
Microsoft learnご紹介vol2
 
達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)達人出版会のご紹介(技術編)
達人出版会のご紹介(技術編)
 
LUIS を使ったアプリケーション開発
LUIS を使ったアプリケーション開発LUIS を使ったアプリケーション開発
LUIS を使ったアプリケーション開発
 
MSBプレ講座ノーコード開発
MSBプレ講座ノーコード開発MSBプレ講座ノーコード開発
MSBプレ講座ノーコード開発
 
Dynamic frameworks tips
Dynamic frameworks tipsDynamic frameworks tips
Dynamic frameworks tips
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
 
milkcocoa入門@milkcocoa meetup#1
milkcocoa入門@milkcocoa meetup#1milkcocoa入門@milkcocoa meetup#1
milkcocoa入門@milkcocoa meetup#1
 

Andere mochten auch

Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in Swift
Kaz Yoshikawa
 
Reactive extensions入門v0.1
Reactive extensions入門v0.1Reactive extensions入門v0.1
Reactive extensions入門v0.1
一希 大田
 

Andere mochten auch (13)

What is reactive programming?
What is reactive programming?What is reactive programming?
What is reactive programming?
 
リアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについてリアクティブプログラミングとMVVMパターンについて
リアクティブプログラミングとMVVMパターンについて
 
Functional Programming in Swift
Functional Programming in SwiftFunctional Programming in Swift
Functional Programming in Swift
 
Swift bond コードリーディング
Swift bond コードリーディングSwift bond コードリーディング
Swift bond コードリーディング
 
How to handle bitcode
How to handle bitcodeHow to handle bitcode
How to handle bitcode
 
BaseViewControllerは作りたくない
BaseViewControllerは作りたくないBaseViewControllerは作りたくない
BaseViewControllerは作りたくない
 
Sprar piano 2017 02 webinar
Sprar   piano 2017 02 webinarSprar   piano 2017 02 webinar
Sprar piano 2017 02 webinar
 
リアクティブプログラミング
リアクティブプログラミングリアクティブプログラミング
リアクティブプログラミング
 
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のことCarthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
 
Reactive extensions入門v0.1
Reactive extensions入門v0.1Reactive extensions入門v0.1
Reactive extensions入門v0.1
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 
PET Speaking Guide
PET Speaking GuidePET Speaking Guide
PET Speaking Guide
 
Slide titolo revisore.4
Slide titolo revisore.4Slide titolo revisore.4
Slide titolo revisore.4
 

Ähnlich wie Swift bondでつなげてプログラミング

Swaggerのさわりだけ
SwaggerのさわりだけSwaggerのさわりだけ
Swaggerのさわりだけ
Masakazu Muraoka
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
Masakazu Muraoka
 
ガラケーで楽しむオレJSの勧め
ガラケーで楽しむオレJSの勧めガラケーで楽しむオレJSの勧め
ガラケーで楽しむオレJSの勧め
Hiroshi Tokumaru
 
早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング
Ippei Arita
 

Ähnlich wie Swift bondでつなげてプログラミング (20)

Swift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswiftSwift 3 その基本ルールを眺める #cswift
Swift 3 その基本ルールを眺める #cswift
 
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
 
Flex入門
Flex入門Flex入門
Flex入門
 
プロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafeプロトコル拡張の話? #WWDC21cafe
プロトコル拡張の話? #WWDC21cafe
 
通常の3倍の速度で プログラミング!? 「 Emacsキーバインドのすすめ」
通常の3倍の速度でプログラミング!?「 Emacsキーバインドのすすめ」通常の3倍の速度でプログラミング!?「 Emacsキーバインドのすすめ」
通常の3倍の速度で プログラミング!? 「 Emacsキーバインドのすすめ」
 
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-EdoiOSアプリ開発のためのSwiftビギナーズ勉強会 第6回    @Co-Edo
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
Mizuno buddypress-plugin
Mizuno buddypress-pluginMizuno buddypress-plugin
Mizuno buddypress-plugin
 
今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト今から始めよう!WordPressで作る女子ウケ★スマホサイト
今から始めよう!WordPressで作る女子ウケ★スマホサイト
 
Swaggerのさわりだけ
SwaggerのさわりだけSwaggerのさわりだけ
Swaggerのさわりだけ
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
リモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみたリモートデバッグツール Weinerをつかってみた
リモートデバッグツール Weinerをつかってみた
 
OpenGLプログラミング
OpenGLプログラミングOpenGLプログラミング
OpenGLプログラミング
 
ガラケーで楽しむオレJSの勧め
ガラケーで楽しむオレJSの勧めガラケーで楽しむオレJSの勧め
ガラケーで楽しむオレJSの勧め
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
Spring Integration 超入門
Spring Integration 超入門Spring Integration 超入門
Spring Integration 超入門
 
早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング早稲田大学授業 - モバイルプログラミング
早稲田大学授業 - モバイルプログラミング
 
Secret of Firefox
Secret of FirefoxSecret of Firefox
Secret of Firefox
 

Swift bondでつなげてプログラミング