From c555862a67c524de5437fb64e0f666ccc08e82b7 Mon Sep 17 00:00:00 2001 From: Segey Shulga Date: Thu, 31 Dec 2015 17:41:57 +0200 Subject: [PATCH] #333 made changes according to Rx naming conventions --- Rx.xcodeproj/project.pbxproj | 16 +++++++------- RxCocoa/iOS/NSTextStorage+Rx.swift | 21 +++++++++---------- RxCocoa/iOS/UITextView+Rx.swift | 15 ++++++++++++- RxExample/RxExample.xcodeproj/project.pbxproj | 8 +++---- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/Rx.xcodeproj/project.pbxproj b/Rx.xcodeproj/project.pbxproj index 3de5a96a..da5c0eb4 100644 --- a/Rx.xcodeproj/project.pbxproj +++ b/Rx.xcodeproj/project.pbxproj @@ -7,12 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 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 */; }; 84C225A31C33F00B008724EC /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225A21C33F00B008724EC /* RxTextStorageDelegateProxy.swift */; }; 84C225A41C33F00B008724EC /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225A21C33F00B008724EC /* RxTextStorageDelegateProxy.swift */; }; 84C225A51C33F00B008724EC /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225A21C33F00B008724EC /* RxTextStorageDelegateProxy.swift */; }; - 84C225AF1C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225AE1C3404F4008724EC /* NSTextStorage+Rx.swift */; }; - 84C225B01C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225AE1C3404F4008724EC /* NSTextStorage+Rx.swift */; }; - 84C225B11C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225AE1C3404F4008724EC /* NSTextStorage+Rx.swift */; }; 9BA1CBD31C0F7D550044B50A /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */; }; 9BA1CBFD1C0F84A10044B50A /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */; }; 9BA1CBFE1C0F84C40044B50A /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */; }; @@ -1010,8 +1010,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextStorage+Rx.swift"; sourceTree = ""; }; 84C225A21C33F00B008724EC /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTextStorageDelegateProxy.swift; sourceTree = ""; }; - 84C225AE1C3404F4008724EC /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextStorage+Rx.swift"; sourceTree = ""; }; 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIActivityIndicatorView+Rx.swift"; sourceTree = ""; }; A111CE961B91C97C00D0DCEE /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; B1B7C3BC1BDD39DB0076934E /* TakeLast.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TakeLast.swift; sourceTree = ""; }; @@ -1779,7 +1779,7 @@ C88254121B8A752B00B02D69 /* UITableView+Rx.swift */, C88254131B8A752B00B02D69 /* UITextField+Rx.swift */, C88254141B8A752B00B02D69 /* UITextView+Rx.swift */, - 84C225AE1C3404F4008724EC /* NSTextStorage+Rx.swift */, + 842A5A281C357F7D003568D5 /* NSTextStorage+Rx.swift */, 9BA1CBD11C0F7C0A0044B50A /* UIActivityIndicatorView+Rx.swift */, C8BCD3EC1C14B5FB005F1280 /* UIView+Rx.swift */, ); @@ -2522,7 +2522,6 @@ C8093EFD1B8A732E0088E94D /* RxTarget.swift in Sources */, C88254361B8A752B00B02D69 /* UITextView+Rx.swift in Sources */, C88254171B8A752B00B02D69 /* RxTableViewReactiveArrayDataSource.swift in Sources */, - 84C225AF1C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */, C882541E1B8A752B00B02D69 /* RxCollectionViewDataSourceProxy.swift in Sources */, C80DDE971BCE69BA006A1832 /* ControlProperty+Driver.swift in Sources */, C80DDE931BCE69BA006A1832 /* ControlEvent+Driver.swift in Sources */, @@ -2564,6 +2563,7 @@ C8093ED51B8A732E0088E94D /* _RXDelegateProxy.m in Sources */, C8093EF51B8A732E0088E94D /* NSObject+Rx.swift in Sources */, 9BA1CBD31C0F7D550044B50A /* UIActivityIndicatorView+Rx.swift in Sources */, + 842A5A2C1C357F92003568D5 /* NSTextStorage+Rx.swift in Sources */, C88254241B8A752B00B02D69 /* RxTextViewDelegateProxy.swift in Sources */, C88254271B8A752B00B02D69 /* UIBarButtonItem+Rx.swift in Sources */, C88254251B8A752B00B02D69 /* UIActionSheet+Rx.swift in Sources */, @@ -3195,7 +3195,6 @@ C8F0C00A1BBBFBB9001B112F /* RxTarget.swift in Sources */, C8F0C00B1BBBFBB9001B112F /* UITextView+Rx.swift in Sources */, C8F0C00C1BBBFBB9001B112F /* RxTableViewReactiveArrayDataSource.swift in Sources */, - 84C225B11C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */, C8F0C00D1BBBFBB9001B112F /* RxCollectionViewDataSourceProxy.swift in Sources */, C80DDE9A1BCE69BA006A1832 /* ControlProperty+Driver.swift in Sources */, C80DDE961BCE69BA006A1832 /* ControlEvent+Driver.swift in Sources */, @@ -3237,6 +3236,7 @@ C8F0C0261BBBFBB9001B112F /* _RXDelegateProxy.m in Sources */, C8F0C0271BBBFBB9001B112F /* NSObject+Rx.swift in Sources */, 9BA1CBFE1C0F84C40044B50A /* UIActivityIndicatorView+Rx.swift in Sources */, + 842A5A2E1C357F94003568D5 /* NSTextStorage+Rx.swift in Sources */, C8F0C0281BBBFBB9001B112F /* RxTextViewDelegateProxy.swift in Sources */, C8F0C0291BBBFBB9001B112F /* UIBarButtonItem+Rx.swift in Sources */, C8F0C02A1BBBFBB9001B112F /* UIActionSheet+Rx.swift in Sources */, @@ -3287,7 +3287,6 @@ D2138C981BB9BEEE00339B5C /* RxCocoa.swift in Sources */, D2138C991BB9BEEE00339B5C /* RxTarget.swift in Sources */, D203C5081BB9C53E00D02D00 /* UIGestureRecognizer+Rx.swift in Sources */, - 84C225B01C3404F4008724EC /* NSTextStorage+Rx.swift in Sources */, D2138C931BB9BEDA00339B5C /* NSNotificationCenter+Rx.swift in Sources */, C80DDE991BCE69BA006A1832 /* ControlProperty+Driver.swift in Sources */, C80DDE951BCE69BA006A1832 /* ControlEvent+Driver.swift in Sources */, @@ -3329,6 +3328,7 @@ D203C5051BB9C53E00D02D00 /* UICollectionView+Rx.swift in Sources */, D2138C8D1BB9BECD00339B5C /* ControlProperty.swift in Sources */, 9BA1CBFD1C0F84A10044B50A /* UIActivityIndicatorView+Rx.swift in Sources */, + 842A5A2D1C357F93003568D5 /* NSTextStorage+Rx.swift in Sources */, D203C5071BB9C53E00D02D00 /* UIDatePicker+Rx.swift in Sources */, D2138C941BB9BEDA00339B5C /* NSObject+Rx+CoreGraphics.swift in Sources */, D203C50D1BB9C53E00D02D00 /* UISegmentedControl+Rx.swift in Sources */, diff --git a/RxCocoa/iOS/NSTextStorage+Rx.swift b/RxCocoa/iOS/NSTextStorage+Rx.swift index 1538a8e6..5c3f3458 100644 --- a/RxCocoa/iOS/NSTextStorage+Rx.swift +++ b/RxCocoa/iOS/NSTextStorage+Rx.swift @@ -6,13 +6,12 @@ // Copyright © 2015 Krunoslav Zaher. All rights reserved. // -#if os(iOS) || os(tvOS) - - import Foundation - import UIKit +import Foundation + #if !RX_NO_MODULE import RxSwift #endif + import UIKit extension NSTextStorage { @@ -20,15 +19,15 @@ extension NSTextStorage { return proxyForObject(RxTextStorageDelegateProxy.self, self) } - public var rx_string:Observable { + public var rx_didProcessEditingRangeChangeInLength: Observable<(editedMask:NSTextStorageEditActions, editedRange:NSRange, delta:Int)> { return rx_delegate .observe("textStorage:didProcessEditing:range:changeInLength:") - .map({ a in - let textStorage:NSTextStorage = castOrFatalError(a[0]) - return textStorage.string + .map({ (a) in + let editedMask:NSTextStorageEditActions = NSTextStorageEditActions(rawValue: castOrFatalError(a[1]) as UInt) + let editedRange:NSRange = (castOrFatalError(a[2]) as NSValue).rangeValue + let delta:Int = castOrFatalError(a[3]) + + return (editedMask, editedRange, delta) }) - .distinctUntilChanged() // dont know why, but system call delegate twice on auto correction } } - -#endif \ No newline at end of file diff --git a/RxCocoa/iOS/UITextView+Rx.swift b/RxCocoa/iOS/UITextView+Rx.swift index 379016d3..5b4bb470 100644 --- a/RxCocoa/iOS/UITextView+Rx.swift +++ b/RxCocoa/iOS/UITextView+Rx.swift @@ -31,7 +31,20 @@ extension UITextView { Reactive wrapper for `text` property. */ public var rx_text: ControlProperty { - let source: Observable = textStorage.rx_string + let source: Observable = Observable.deferred({ [weak self] () -> Observable in + let text = self?.text ?? "" + + let textChanged = self?.textStorage + .rx_didProcessEditingRangeChangeInLength + .map({[weak self] (_, _, _) in + return self?.textStorage.string ?? "" + }) + ?? Observable.empty() + + return textChanged + .startWith(text) + .distinctUntilChanged() + }) return ControlProperty(values: source, valueSink: AnyObserver { [weak self] event in switch event { diff --git a/RxExample/RxExample.xcodeproj/project.pbxproj b/RxExample/RxExample.xcodeproj/project.pbxproj index a9efc6ce..09de615a 100644 --- a/RxExample/RxExample.xcodeproj/project.pbxproj +++ b/RxExample/RxExample.xcodeproj/project.pbxproj @@ -11,9 +11,9 @@ 07A5C3DB1B70B703001EFE5C /* CalculatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A5C3DA1B70B703001EFE5C /* CalculatorViewController.swift */; }; 07A5C3DC1B70B703001EFE5C /* CalculatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07A5C3DA1B70B703001EFE5C /* CalculatorViewController.swift */; }; 07E3C2331B03605B0010338D /* Dependencies.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07E3C2321B03605B0010338D /* Dependencies.swift */; }; + 842A5A271C357F63003568D5 /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 842A5A251C357F21003568D5 /* NSTextStorage+Rx.swift */; }; 84C225A81C3402E5008724EC /* UITextView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89465591BC6C2BC0055219D /* UITextView+Rx.swift */; }; 84C225AB1C340474008724EC /* RxTextStorageDelegateProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225AA1C340474008724EC /* RxTextStorageDelegateProxy.swift */; }; - 84C225AD1C34048E008724EC /* NSTextStorage+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84C225AC1C34048E008724EC /* NSTextStorage+Rx.swift */; }; 9B4612951C106CF100BBBB4E /* UIActivityIndicatorView+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B4612941C106CF100BBBB4E /* UIActivityIndicatorView+Rx.swift */; }; B1604CB51BE49F8D002E1279 /* DownloadableImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1604CB41BE49F8D002E1279 /* DownloadableImage.swift */; }; B1604CC21BE5B895002E1279 /* ReachabilityService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B18F3BE11BDB2E8F000AAC79 /* ReachabilityService.swift */; }; @@ -586,8 +586,8 @@ 075F130F1B4E9D5A000D7861 /* APIWrappersViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = APIWrappersViewController.swift; sourceTree = ""; }; 07A5C3DA1B70B703001EFE5C /* CalculatorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CalculatorViewController.swift; sourceTree = ""; }; 07E3C2321B03605B0010338D /* Dependencies.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Dependencies.swift; path = Examples/Dependencies.swift; sourceTree = ""; }; + 842A5A251C357F21003568D5 /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextStorage+Rx.swift"; sourceTree = ""; }; 84C225AA1C340474008724EC /* RxTextStorageDelegateProxy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RxTextStorageDelegateProxy.swift; sourceTree = ""; }; - 84C225AC1C34048E008724EC /* NSTextStorage+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "NSTextStorage+Rx.swift"; sourceTree = ""; }; 9B4612941C106CF100BBBB4E /* UIActivityIndicatorView+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIActivityIndicatorView+Rx.swift"; sourceTree = ""; }; B1604CB41BE49F8D002E1279 /* DownloadableImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DownloadableImage.swift; sourceTree = ""; }; B1604CC81BE5BBFA002E1279 /* UIImageView+DownloadableImage.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImageView+DownloadableImage.swift"; sourceTree = ""; }; @@ -1599,7 +1599,7 @@ C89465571BC6C2BC0055219D /* UITableView+Rx.swift */, C89465581BC6C2BC0055219D /* UITextField+Rx.swift */, C89465591BC6C2BC0055219D /* UITextView+Rx.swift */, - 84C225AC1C34048E008724EC /* NSTextStorage+Rx.swift */, + 842A5A251C357F21003568D5 /* NSTextStorage+Rx.swift */, 9B4612941C106CF100BBBB4E /* UIActivityIndicatorView+Rx.swift */, ); path = iOS; @@ -2186,11 +2186,11 @@ C8297E451B6CF905000589EA /* SectionedViewType.swift in Sources */, C822B1DD1C14CD1C0088A01A /* DefaultImplementations.swift in Sources */, C89464D51BC6C2B00055219D /* ObserveOnSerialDispatchQueue.swift in Sources */, + 842A5A271C357F63003568D5 /* NSTextStorage+Rx.swift in Sources */, C843A08F1C1CE39900CBA4BD /* GitHubSearchRepositoriesAPI.swift in Sources */, C894658E1BC6C2BC0055219D /* UIAlertView+Rx.swift in Sources */, C83974231BF77413004F02CC /* NSObject+Rx+KVORepresentable.swift in Sources */, C8297E461B6CF905000589EA /* Example.swift in Sources */, - 84C225AD1C34048E008724EC /* NSTextStorage+Rx.swift in Sources */, C89465081BC6C2B00055219D /* PublishSubject.swift in Sources */, C89464FC1BC6C2B00055219D /* RxMutableBox.swift in Sources */, C809E97B1BE6841C0058D948 /* Wireframe.swift in Sources */,