Add rx_refreshing for UIRefreshControl

This commit is contained in:
Yosuke Ishikawa 2016-01-31 00:33:36 +09:00
parent 14efe368a7
commit 974bba5218
3 changed files with 90 additions and 0 deletions

View File

@ -11,6 +11,11 @@
79E9DE8A1C3417FD009970AF /* DispatchQueueSchedulerQOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E9DE881C3417FD009970AF /* DispatchQueueSchedulerQOS.swift */; };
79E9DE8B1C3417FD009970AF /* DispatchQueueSchedulerQOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E9DE881C3417FD009970AF /* DispatchQueueSchedulerQOS.swift */; };
79E9DE8C1C3417FD009970AF /* DispatchQueueSchedulerQOS.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79E9DE881C3417FD009970AF /* DispatchQueueSchedulerQOS.swift */; };
7F600F3F1C5D0C6C00535B1D /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F600F3D1C5D0C0100535B1D /* UIRefreshControl+Rx.swift */; };
7F600F401C5D0C6D00535B1D /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F600F3D1C5D0C0100535B1D /* UIRefreshControl+Rx.swift */; };
7F600F411C5D0C6E00535B1D /* UIRefreshControl+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F600F3D1C5D0C0100535B1D /* UIRefreshControl+Rx.swift */; };
7FE849471C5D0D6A00845C0E /* UIRefreshControl+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F600F421C5D0D2D00535B1D /* UIRefreshControl+RxTests.swift */; };
7FE849481C5D0D6B00845C0E /* UIRefreshControl+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F600F421C5D0D2D00535B1D /* UIRefreshControl+RxTests.swift */; };
842A5A2C1C357F92003568D5 /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */; };
842A5A2D1C357F93003568D5 /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */; };
842A5A2E1C357F94003568D5 /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */; };
@ -1306,6 +1311,8 @@
/* Begin PBXFileReference section */
79E9DE881C3417FD009970AF /* DispatchQueueSchedulerQOS.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatchQueueSchedulerQOS.swift; sourceTree = "<group>"; };
7F600F3D1C5D0C0100535B1D /* UIRefreshControl+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIRefreshControl+Rx.swift"; sourceTree = "<group>"; };
7F600F421C5D0D2D00535B1D /* UIRefreshControl+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIRefreshControl+RxTests.swift"; sourceTree = "<group>"; };
842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextStorage+Rx.swift"; sourceTree = "<group>"; };
8476A01F1C3D5D580040BA22 /* UIImagePickerController+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImagePickerController+RxTests.swift"; sourceTree = "<group>"; };
8479BC441C3ACDA400FB8B54 /* RxImagePickerDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxImagePickerDelegateProxy.swift; sourceTree = "<group>"; };
@ -2184,6 +2191,7 @@
C83508EF1C38706D0027C24C /* RxTests-tvOS-Bridging-Header.h */,
C83508F01C38706D0027C24C /* SentMessageTest.swift */,
C83508F11C38706D0027C24C /* UIView+RxTests.swift */,
7F600F421C5D0D2D00535B1D /* UIRefreshControl+RxTests.swift */,
);
path = RxCocoaTests;
sourceTree = "<group>";
@ -2305,6 +2313,7 @@
C882540A1B8A752B00B02D69 /* UIGestureRecognizer+Rx.swift */,
C882540B1B8A752B00B02D69 /* UIImageView+Rx.swift */,
C882540C1B8A752B00B02D69 /* UILabel+Rx.swift */,
7F600F3D1C5D0C0100535B1D /* UIRefreshControl+Rx.swift */,
C882540D1B8A752B00B02D69 /* UIScrollView+Rx.swift */,
C882540E1B8A752B00B02D69 /* UISearchBar+Rx.swift */,
C882540F1B8A752B00B02D69 /* UISegmentedControl+Rx.swift */,
@ -3208,6 +3217,7 @@
84C225A31C33F00B008724EC /* RxTextStorageDelegateProxy.swift in Sources */,
C8093EFB1B8A732E0088E94D /* RxCocoa.swift in Sources */,
C88254231B8A752B00B02D69 /* RxTableViewDelegateProxy.swift in Sources */,
7F600F411C5D0C6E00535B1D /* UIRefreshControl+Rx.swift in Sources */,
F31F35B01BB4FED800961002 /* UIStepper+Rx.swift in Sources */,
C882542D1B8A752B00B02D69 /* UIImageView+Rx.swift in Sources */,
C80D33981B922FB00014629D /* ControlEvent.swift in Sources */,
@ -3399,6 +3409,7 @@
C835092F1C38706E0027C24C /* ControlPropertyTests.swift in Sources */,
C835093C1C38706E0027C24C /* RxObjCRuntimeState.swift in Sources */,
C83509491C38706E0027C24C /* Observable+Extensions.swift in Sources */,
7FE849471C5D0D6A00845C0E /* UIRefreshControl+RxTests.swift in Sources */,
C835094A1C38706E0027C24C /* TestVirtualScheduler.swift in Sources */,
C83509501C38706E0027C24C /* DisposableTest.swift in Sources */,
C835094E1C38706E0027C24C /* BehaviorSubjectTest.swift in Sources */,
@ -3470,6 +3481,7 @@
C84CB1721C3876B800EB63CC /* UIView+RxTests.swift in Sources */,
C83509F81C38755D0027C24C /* HistoricalSchedulerTest.swift in Sources */,
C83509F21C38755D0027C24C /* AnonymousObservable+Test.swift in Sources */,
7FE849481C5D0D6B00845C0E /* UIRefreshControl+RxTests.swift in Sources */,
C83509D31C3875390027C24C /* RXObjCRuntime+Testing.m in Sources */,
C83509FD1C38755D0027C24C /* Observable+ConcurrencyTest.swift in Sources */,
C8350A141C38756A0027C24C /* Observable+TimeTest.swift in Sources */,
@ -4094,6 +4106,7 @@
84C225A51C33F00B008724EC /* RxTextStorageDelegateProxy.swift in Sources */,
C8F0C00F1BBBFBB9001B112F /* RxCocoa.swift in Sources */,
C8F0C0101BBBFBB9001B112F /* RxTableViewDelegateProxy.swift in Sources */,
7F600F3F1C5D0C6C00535B1D /* UIRefreshControl+Rx.swift in Sources */,
C8F0C0111BBBFBB9001B112F /* UIStepper+Rx.swift in Sources */,
C8F0C0121BBBFBB9001B112F /* UIImageView+Rx.swift in Sources */,
C8F0C0131BBBFBB9001B112F /* ControlEvent.swift in Sources */,
@ -4184,6 +4197,7 @@
D203C5131BB9C53E00D02D00 /* UITextView+Rx.swift in Sources */,
D203C4F41BB9C52400D02D00 /* RxTableViewReactiveArrayDataSource.swift in Sources */,
D2138C951BB9BEDA00339B5C /* NSObject+Rx.swift in Sources */,
7F600F401C5D0C6D00535B1D /* UIRefreshControl+Rx.swift in Sources */,
D2138C881BB9BEBE00339B5C /* DelegateProxy.swift in Sources */,
D203C5101BB9C53E00D02D00 /* UISwitch+Rx.swift in Sources */,
D203C5121BB9C53E00D02D00 /* UITextField+Rx.swift in Sources */,

View File

@ -0,0 +1,43 @@
//
// UIRefreshControl+Rx.swift
// RxCocoa
//
// Created by Yosuke Ishikawa on 1/31/16.
// Copyright © 2016 Krunoslav Zaher. All rights reserved.
//
#if os(iOS) || os(tvOS)
import UIKit
#if !RX_NO_MODULE
import RxSwift
#endif
extension UIRefreshControl {
/**
Bindable sink for `beginRefreshing()`, `endRefreshing()` methods.
*/
public var rx_refreshing: AnyObserver<Bool> {
return AnyObserver {event in
MainScheduler.ensureExecutingOnScheduler()
switch (event) {
case .Next(let value):
if value {
self.beginRefreshing()
} else {
self.endRefreshing()
}
case .Error(let error):
bindingErrorToInterface(error)
break
case .Completed:
break
}
}
}
}
#endif

View File

@ -0,0 +1,33 @@
//
// UIRefreshControl+RxTests.swift
// RxTests
//
// Created by Yosuke Ishikawa on 1/31/16.
// Copyright © 2016 Krunoslav Zaher. All rights reserved.
//
import Foundation
import RxSwift
import RxCocoa
import UIKit
import XCTest
class UIRefreshControlTests : RxTest {
}
extension UIRefreshControlTests {
func testRefreshing_True() {
let subject = UIRefreshControl()
Observable.just(true).subscribe(subject.rx_refreshing).dispose()
XCTAssertTrue(subject.refreshing == true)
}
func testRefreshing_False() {
let subject = UIRefreshControl()
Observable.just(false).subscribe(subject.rx_refreshing).dispose()
XCTAssertTrue(subject.refreshing == false)
}
}