SlideShare a Scribd company logo
1 of 37
Download to read offline
var$RAC3$=$Reac,veCocoa$+$Swi2
@ikesyo
#rac_kansai
Reac%veCocoa勉強会関西)2014.07.26)Sat)@はてな京都オフィス
@ikesyo
いけしょー/池田翔
京都でフリーランスのiOS/Android
エンジニアしています
甘いもの大好き!!
お仕事待ってます!
Reac%veCocoaのコミッター(Contributor)やってます
今日はSwi$ベースになった
Reac%veCocoa)3.0のご紹介
※!注意
2014%07%25,)Xcode)6)beta)4時点の内容に基づきます
APIやクラス名など今後変更される可能性は大いにあります
RAC$3.0
元々はこれ
h"ps://github.com/Reac3veCocoa/
Reac3veCocoa/pull/966
_人人人人人人人_
> 突然のSwi$ <
 ̄Y^Y^Y^Y^Y^Y ̄
だけではなく
RACDC%2014:%June%3rd@Github
• The$Future$Of$Reac.veCocoa$by$Jus.n$Spahr9Summers$•$
GitHub$Reac.ve$Cocoa$Developer$Conference
• h#p://vimeo.com/98100163
• h#ps://github.com/jspahrsummers/the<future<of<
reac>vecocoa
h"ps://github.com/jspahrsummers/
RxSwi8
を経て
The$Great$Swi,ening$(a.k.a.$the$
new$3.0)
h"ps://github.com/Reac3veCocoa/
Reac3veCocoa/pull/1382
New$Concepts
• Generics)Support
• Producer
• Consumer
• Signal
• SignalingProperty
• Promise
• Action
Generics(Support
型パラメータは当然サポート
public struct Producer<T> {}
public final class Consumer<T>: Sink {}
extension NSNotificationCenter {
public func rac_notifications
(name: String? = nil, object: AnyObject? = nil)
-> Signal<NSNotification?>
}
extension NSURLSession {
public func rac_dataProducerWithRequest
(request: NSURLRequest)
-> Producer<(NSData, NSURLResponse)>
}
Producer
• Cold&RACSignal:&Event&Stream
• Consumerをアタッチしてイベントをproduceする
• Consumer毎に受け取るイベントやタイミングは異なる
• ConsumerがDisposableを持っていて、Producer生成時の
クロージャではDisposableを返さない
• consumer.disposable.addDisposable(...)
Producer.swi,
public struct Producer<T> {
public init(produce: Consumer<T> -> ()) // +[RACSignal createSignal:]
public static func empty() -> Producer<T> // +[RACSignal empty]
public static func single(value: T) -> Producer<T> // +[RACSignal return:]
public static func error(error: NSError) -> Producer<T> // +[RACSignal error:]
public static func never() -> Producer<T> // +[RACSignal never]
// -[RACSignal subscribe:]
public func produce(consumer: Consumer<T>) -> Disposable
public func produce(consumer: Event<T> -> ()) -> Disposable
// -[RACSignal subscribeNext:error:completed:]
public func produce(
next: T -> (),
error: NSError -> (),
completed: () -> ()
) -> Disposable
}
Producerの生成例
extension RACSignal {
public func asProducer() -> Producer<AnyObject?> {
return Producer { consumer in
let next = { (obj: AnyObject?) -> () in
consumer.put(.Next(Box(obj)))
}
let error = { (maybeError: NSError?) -> () in
let nsError = maybeError.orDefault(RACError.Empty.error)
consumer.put(.Error(nsError))
}
let completed = {
consumer.put(.Completed)
}
let disposable: RACDisposable? = self.subscribeNext(next, error: error, completed: completed)
consumer.disposable.addDisposable(disposable)
}
}
}
Consumer
• like:'id<RACSubscriber> subscriber
• SinkプロトコルのputにEvent<T>でラップした値を渡す
• public func put(event: Event<T>) {}
• 従来の'-sendNext:'などの代わり
• Producerのproduceメソッドに'Event<T> -> ()'のクロー
ジャをConsumerとして渡せる
Consumer.swi,
public final class Consumer<T>: Sink {
public typealias Element = Event<T>
public let disposable = CompositeDisposable()
public init<S: Sink where S.Element == Event<T>>(_ sink: S)
public convenience init(put: Event<T> -> ())
public convenience init(
next: T -> () = emptyNext,
error: NSError -> () = emptyError,
completed: () -> () = emptyCompleted)
public func put(event: Event<T>)
}
Consumerの使用例
extension Producer {
public func asDeferredRACSignal<U: AnyObject>(evidence: Producer<T> -> Producer<U?>) -> RACSignal {
return RACSignal.createSignal { subscriber in
let selfDisposable = evidence(self).produce { event in
switch event {
case let .Next(obj):
subscriber.sendNext(obj)
case let .Error(error):
subscriber.sendError(error)
case let .Completed:
subscriber.sendCompleted()
}
}
return RACDisposable {
selfDisposable.dispose()
}
}
}
}
補足1
• evidenceという型チェックにより、特定の型パラメータを持
つProducerでのみメソッドを呼べるように制限
• Objec've)CとのブリッジなのでStructやEnumは渡せず、
AnyObjectでクラスオブジェクトだけに制限
• 使い方:,引数に,identityという関数を渡すだけ
Iden%ty.swi,
/// The identity function, which returns its argument.
///
/// This can be used to prove to the typechecker that a given type A is
/// equivalent to a given type B.
///
/// For example, the following global function is normally impossible to bring
/// into the `Signal<T>` class:
///
/// func merge<U>(signal: Signal<Signal<U>>) -> Signal<U>
///
/// However, you can work around this restriction using an instance method with
/// an “evidence” parameter:
///
/// func merge<U>(evidence: Signal<T> -> Signal<Signal<U>>) -> Signal<U>
///
/// Which would then be invoked with the identity function, like this:
///
/// signal.merge(identity)
///
/// This will verify that `signal`, which is nominally `Signal<T>`, is logically
/// equivalent to `Signal<Signal<U>>`. If that's not actually the case, a type
/// error will result.
public func identity<T>(id: T) -> T {
return id
}
補足2
• 例えばScalaではGeneralized-Type-Constraintsという言語機能で
同様の制限が可能
• h6p://yuroyoro.hatenablog.com/entry/
20100914/1284471301
• h6p://www.ne.jp/asahi/hishidama/home/tech/scala/
generics.html#hgeneralizedtype_constraints
Signal
• Hot%RACSignal:%Behaviour%in%other%FRP
• CompletedやErrorによる終了はなく、常に現在の値を持つ
• T -> ()%のクロージャがオブサーバー%SinkOf<T>%となって
observeする
• ProducerのConsumerと異なり、全てのオブザーバーが同
じイベントを同じタイミングで受け取る
• observeを開始した時点で現在値が通知される
Signal.swi*
public final class Signal<T> {
public var current: T
public init(initialValue: T, generator: SinkOf<T> -> ())
public class func constant(value: T) -> Signal<T>
public func observe<S: Sink where S.Element == T>
(observer: S) -> Disposable
public func observe(observer: T -> ()) -> Disposable
}
Signalの生成例
extension NSNotificationCenter {
public func rac_notifications
(name: String? = nil, object: AnyObject? = nil)
-> Signal<NSNotification?>
{
let disposable = ScopedDisposable(SerialDisposable())
return Signal(initialValue: nil) { sink in
let observer = self.addObserverForName(name, object: object, queue: nil) { notification in
sink.put(notification)
}
disposable.innerDisposable.innerDisposable = ActionDisposable {
self.removeObserver(observer)
}
return ()
}
}
}
Signal/Observer(SinkOf<T>)の使用例
extension Signal {
/// Creates a "hot" RACSignal that will forward values from the receiver.
///
/// evidence - Used to prove to the typechecker that the receiver is
/// a signal of objects. Simply pass in the `identity` function.
///
/// Returns an infinite signal that will send the observable's current
/// value, then all changes thereafter. The signal will never complete or
/// error, so it must be disposed manually.
public func asInfiniteRACSignal<U: AnyObject>(evidence: Signal<T> -> Signal<U?>) -> RACSignal {
return RACSignal.createSignal { subscriber in
evidence(self).observe { value in
subscriber.sendNext(value)
}
return nil
}
}
}
SignalingProperty
• 値の変更をSignalとして通知することができるプロパティ用
オブジェクト
• KVOの代替手段:&Swi*のクラスにはKVOがなく、監視される側
が自分から通知できるように公開する
• func __conversion()&によりラップされた値を透過的に使
用することができる
SignalingProperty.swi1
public final class SignalingProperty<T>: Sink {
public typealias Element = T
public let signal: Signal<T>
// setするとsignalのオブザーバーに通知される
public var value: T
public init(_ defaultValue: T)
public func __conversion() -> T
public func __conversion() -> Signal<T>
public func put(value: T)
}
SignalingPropertyの使用例
public class Hoge {
var name: SignalingProperty<String> = SignalingProperty("")
}
public func printName(name: String) {
println(name)
}
let hoge = Hoge()
// Stringが必要なのでSignalingProperty<String>から現在の値が取り出される
printName(hoge.name)
hoge.name.signal.observe { name in
println("(name): name was changed!")
}
hoge.name.put("ikesyo")
Promise
• 単一の値を生成(resolve)する遅延タスクを表現する
• ProducerのようなEvent-Streamではないので複数の値を通知
したりはしない
• 値は-public let signal: Signal<T?>-でSignalとして参
照できる
• resolve前:-nil,-resolve後:-生成された値-を通知
Promise.swi*
public final class Promise<T> {
public let signal: Signal<T?>
// 生成時のクロージャの引数の`sink`に`put`することでresolveされる。
// 二度目以降の`put`は無視される。
public init(action: SinkOf<T> -> ())
public func start() -> Promise<T>
public func await() -> T
// Promiseのチェーン
public func then<U>(action: T -> Promise<U>) -> Promise<U>
}
Promiseの使用例
public final class Signal<T> {
public func firstPassingTest(pred: T -> Bool) -> Promise<T> {
return Promise { sink in
self.take(1).observe { value in
if pred(value) {
sink.put(value)
}
}
return ()
}
}
}
Ac#on
• RACCommandの置き換え
• インプットからアウトプットを返すアクション(主にUI用:&デフ
ォルトでメインスレッドで動作)の実行・結果を提供する
• 個別のアクション実行の結果はPromise<Result<T>で返す
• 結果のチェックはSignal<Result<T>?>なのでobserveで
• 実行結果の値があるのでアクションの合成(チェーン)が可能
Ac#on.swi*
public final class Action<Input, Output> {
public typealias ExecutionSignal = Signal<Result<Output>?>
// RACCommand.executionSignalsと同様
public let executions: Signal<ExecutionSignal?>
public var results: Signal<Result<Output>?> // 実行結果
public var executing: Signal<Bool> // 実行中かどうか
public let enabled: Signal<Bool> // 有効かどうか
public var values: Signal<Output?> // 成功結果
public var errors: Signal<NSError?> // 失敗結果
// アクションとなるクロージャを渡す
public init(enabledIf: Signal<Bool>,
scheduler: Scheduler = MainScheduler(),
execute: Input -> Promise<Result<Output>>)
public func execute(input: Input) -> ExecutionSignal // アクションの実行
public func then<NewOutput> // アクションの合成
(action: Action<Output, NewOutput>)
-> Action<Input, NewOutput>
}
Q&A?
ありがとうございました!

More Related Content

What's hot

プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
クロージャー
クロージャークロージャー
クロージャー1000 VICKY
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよkoji lin
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化Lintaro Ina
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門Makoto Fukuhara
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】株式会社ランチェスター
 
Kotlin勉強会 in ehime
Kotlin勉強会 in ehimeKotlin勉強会 in ehime
Kotlin勉強会 in ehimeEigoro Yamamura
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行guest5f4320
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Yuichi Sakuraba
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文Appresso Engineering Team
 
Ductモジュール入門
Ductモジュール入門Ductモジュール入門
Ductモジュール入門Kent Ohashi
 
Flow.js
Flow.jsFlow.js
Flow.jsuupaa
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」Tsuyoshi Yamamoto
 
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Uehara Junji
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいcharsbar
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック庸介 高橋
 

What's hot (20)

プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
 
クロージャー
クロージャークロージャー
クロージャー
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよサーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
 
GraphQL入門
GraphQL入門GraphQL入門
GraphQL入門
 
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
はてなブックマークにおけるアクセス制御 - 半環構造に基づくモデル化
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
 
Kotlin勉強会 in ehime
Kotlin勉強会 in ehimeKotlin勉強会 in ehime
Kotlin勉強会 in ehime
 
Scala2.8への移行
Scala2.8への移行Scala2.8への移行
Scala2.8への移行
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
 
JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文JavaScript 勉強会 ― 変数・演算子・文
JavaScript 勉強会 ― 変数・演算子・文
 
Ductモジュール入門
Ductモジュール入門Ductモジュール入門
Ductモジュール入門
 
Flow.js
Flow.jsFlow.js
Flow.js
 
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
 
Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418Shibuya JVM Groovy 20150418
Shibuya JVM Groovy 20150418
 
CPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したいCPANの依存モジュールをもう少し正しく検出したい
CPANの依存モジュールをもう少し正しく検出したい
 
OSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニックOSSから学ぶSwift実践テクニック
OSSから学ぶSwift実践テクニック
 
Akka HTTP
Akka HTTPAkka HTTP
Akka HTTP
 
VerilatorとSystemC
VerilatorとSystemCVerilatorとSystemC
VerilatorとSystemC
 

Viewers also liked

はじめてのReactiveCocoa
はじめてのReactiveCocoaはじめてのReactiveCocoa
はじめてのReactiveCocoa章平 福井
 
Dynamic frameworks tips
Dynamic frameworks tipsDynamic frameworks tips
Dynamic frameworks tipsSyo Ikeda
 
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansaiSwift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansaiSyo Ikeda
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topicsSyo Ikeda
 
Audio QueueでSin波再生
Audio QueueでSin波再生Audio QueueでSin波再生
Audio QueueでSin波再生Yuichi Fujishige
 
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバHimotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバSyo Ikeda
 
How to handle bitcode
How to handle bitcodeHow to handle bitcode
How to handle bitcodeSyo Ikeda
 
ObjectMapperでJSONマッピング
ObjectMapperでJSONマッピングObjectMapperでJSONマッピング
ObjectMapperでJSONマッピングSyo Ikeda
 
1画面から始めるStoryboard
1画面から始めるStoryboard1画面から始めるStoryboard
1画面から始めるStoryboardYuichi Fujishige
 
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよSwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよSyo Ikeda
 
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバiOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバSyo Ikeda
 
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のことCarthageについて知りたいn個のこと
Carthageについて知りたいn個のことSyo Ikeda
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Natasha Murashev
 

Viewers also liked (18)

はじめてのReactiveCocoa
はじめてのReactiveCocoaはじめてのReactiveCocoa
はじめてのReactiveCocoa
 
Dynamic frameworks tips
Dynamic frameworks tipsDynamic frameworks tips
Dynamic frameworks tips
 
Swift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansaiSwift 1.2からSwift 2への移行 #cocoa_kansai
Swift 1.2からSwift 2への移行 #cocoa_kansai
 
Xcode and iTC submission topics
Xcode and iTC submission topicsXcode and iTC submission topics
Xcode and iTC submission topics
 
Auto Layout の小技
Auto Layout の小技Auto Layout の小技
Auto Layout の小技
 
CAKeyframeAnimation
CAKeyframeAnimationCAKeyframeAnimation
CAKeyframeAnimation
 
SwiftLint
SwiftLintSwiftLint
SwiftLint
 
Audio QueueでSin波再生
Audio QueueでSin波再生Audio QueueでSin波再生
Audio QueueでSin波再生
 
iOS 6 のAuto Rotation
iOS 6 のAuto RotationiOS 6 のAuto Rotation
iOS 6 のAuto Rotation
 
iOSのFileProtection
iOSのFileProtectioniOSのFileProtection
iOSのFileProtection
 
Himotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバHimotoki: A type-safe JSON decoding library #関モバ
Himotoki: A type-safe JSON decoding library #関モバ
 
How to handle bitcode
How to handle bitcodeHow to handle bitcode
How to handle bitcode
 
ObjectMapperでJSONマッピング
ObjectMapperでJSONマッピングObjectMapperでJSONマッピング
ObjectMapperでJSONマッピング
 
1画面から始めるStoryboard
1画面から始めるStoryboard1画面から始めるStoryboard
1画面から始めるStoryboard
 
SwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよSwiftでAndroidアプリ書けるってよ
SwiftでAndroidアプリ書けるってよ
 
iOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバiOSでのFramework導入のおさらい #関モバ
iOSでのFramework導入のおさらい #関モバ
 
Carthageについて知りたいn個のこと
Carthageについて知りたいn個のことCarthageについて知りたいn個のこと
Carthageについて知りたいn個のこと
 
Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)Protocol-Oriented MVVM (extended edition)
Protocol-Oriented MVVM (extended edition)
 

Similar to var RAC3 = ReactiveCocoa + Swift

Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことSwiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことyohei sugigami
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Androidyo_waka
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発papamitra
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWINYoshifumi Kawai
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftTomohiro Kumagai
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会Koichi Sakata
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiTomohiro Kumagai
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Akira Inoue
 
Spark Streaming Snippets
Spark Streaming SnippetsSpark Streaming Snippets
Spark Streaming SnippetsKoji Agawa
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Uehara Junji
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)Taketo Sano
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.jsTanUkkii
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidationTakayoshi Tanaka
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Masaki Yamamoto
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろkjwtnb
 

Similar to var RAC3 = ReactiveCocoa + Swift (20)

Swiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったことSwiftのアプリ開発でハマったこと
Swiftのアプリ開発でハマったこと
 
RxJava on Android
RxJava on AndroidRxJava on Android
RxJava on Android
 
ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発ScalaでAndroidアプリ開発
ScalaでAndroidアプリ開発
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
Swift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswiftSwift 2.0 で変わったところ「後編」 #cswift
Swift 2.0 で変わったところ「後編」 #cswift
 
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
 
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansaiJavaScriptCore.framework の普通な使い方 #cocoa_kansai
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
 
Driverについて
DriverについてDriverについて
Driverについて
 
Spark Streaming Snippets
Spark Streaming SnippetsSpark Streaming Snippets
Spark Streaming Snippets
 
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)Java One 2012 Tokyo JVM Lang. BOF(Groovy)
Java One 2012 Tokyo JVM Lang. BOF(Groovy)
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
objc2swift (自動変換の野望)
objc2swift (自動変換の野望)objc2swift (自動変換の野望)
objc2swift (自動変換の野望)
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話Jenkins x Kubernetesが簡単だと思ったら大変だった話
Jenkins x Kubernetesが簡単だと思ったら大変だった話
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 

var RAC3 = ReactiveCocoa + Swift