RxSwift-RxExample 學(xué)習(xí)系列(三)

6 API warppers

這個(gè)demo就是大體演示了幾個(gè)UIKit 擴(kuò)展的一些Reactive 屬性
沒啥好說的,這邊就隨便寫寫了
這邊的 <->的操作符,一開始我還是有點(diǎn)懵逼楼雹。
發(fā)現(xiàn)在Operators文件中烫沙,是創(chuàng)建的拓展操作符确丢。就是綁定。平常應(yīng)該用不到奇钞。
平時(shí)我們UIKit的屬性 一般都改成響應(yīng)式都有3個(gè)分類
1 Binder 遵循 ObserverType協(xié)議
UILabel為例

/// Bindable sink for `text` property.
    public var text: Binder<String?> {
        return Binder(self.base) { label, text in
            label.text = text
        }
    }

textBinder都是繼承Binder
這說這些屬性只能是訂閱者。不能去發(fā)送消息漂坏。
只能這樣使用
xxx.bind(to: text)

2 ControlEvent 遵循 ControlEventType協(xié)議 上層又是 ObservableType
這說明 這是可訂閱的
UIButton 為例

/// Reactive wrapper for `TouchUpInside` control event.
    public var tap: ControlEvent<Void> {
        return controlEvent(.touchUpInside)
    }

tap 就是 ControlEvent 類型
ControlEvent源碼景埃,克直接訂閱 也可以轉(zhuǎn)化為 Observable 訂閱

public func subscribe<O : ObserverType>(_ observer: O) -> Disposable where O.E == E {
        return _events.subscribe(observer)
    }

    /// - returns: `Observable` interface.
    public func asObservable() -> Observable<E> {
        return _events
    }

3 ControlProperty 遵循ControlPropertyType協(xié)議 上層是 ObservableType, ObserverType
UITextField為例

/// Reactive wrapper for `text` property.
    public var text: ControlProperty<String?> {
        return value
    }

textfiled的text 既可以發(fā)送休息,也可以接受消息

總結(jié)的來說顶别,還是ObservableType, ObserverType 一般來說ObserverType 都是那些顯示的屬性去遵循谷徙。ObservableType 都是一些事件屬性和與用戶有交互的一些屬性(例如textfiled的text)去遵循

7 Calculator

哇 這個(gè)真是看的頭皮發(fā)麻 溜了 有時(shí)間補(bǔ)上

8 ImagePicker

這個(gè)demo 重點(diǎn)就是擴(kuò)展了創(chuàng)建了imagePicker的過程
我們來看vc 中的代碼

cameraButton.rx.tap
            .flatMapLatest { [weak self] _ in //1 tap -> picker
                return UIImagePickerController.rx.createWithParent(self) { picker in
                    picker.sourceType = .camera
                    picker.allowsEditing = false
                } //2 -> info
                .flatMap { $0.rx.didFinishPickingMediaWithInfo }
                .take(1)
            }
            .map { info in //3 info map image
                return info[UIImagePickerControllerOriginalImage] as? UIImage
            }
            .bind(to: imageView.rx.image) //4 binder
            .disposed(by: disposeBag)

tap -> create picker -> image -> binder
這里flatMapLatest 我感覺沒有必要 因?yàn)閯?chuàng)建picker信號序列,應(yīng)該不存在信號延遲的問題驯绎。這里我感覺可以換成flatMap
這里重點(diǎn)就是tap 的event 信號 轉(zhuǎn)換為 picker序列

extension Reactive where Base: UIImagePickerController {
    static func createWithParent(_ parent: UIViewController?, animated: Bool = true, configureImagePicker: @escaping (UIImagePickerController) throws -> () = { x in }) -> Observable<UIImagePickerController> {
        return Observable.create { [weak parent] observer in
            let imagePicker = UIImagePickerController() //
            let dismissDisposable = imagePicker.rx
                .didCancel
                .subscribe(onNext: { [weak imagePicker] _ in
                    guard let imagePicker = imagePicker else {
                        return
                    }
                    dismissViewController(imagePicker, animated: animated)
                })
            
            do {
                try configureImagePicker(imagePicker)
            }
            catch let error {
                observer.on(.error(error))
                return Disposables.create()
            }
            
            //
            guard let parent = parent else {
                observer.on(.completed)
                return Disposables.create()
            }

            parent.present(imagePicker, animated: animated, completion: nil)
            observer.on(.next(imagePicker))
            
            return Disposables.create(dismissDisposable, Disposables.create {
                    dismissViewController(imagePicker, animated: animated)
                })
        }
    }
}

代碼 我們來一步一步看
1 方法名
static func createWithParent(_ parent: UIViewController?, animated: Bool = true, configureImagePicker: @escaping (UIImagePickerController) throws -> () = { x in }) -> Observable<UIImagePickerController>
這個(gè)configureImagePicker 差點(diǎn)看懵逼了 其實(shí)就是給了一個(gè)空實(shí)現(xiàn)完慧。沒什么作用

1 創(chuàng)建imagepicker
2 訂閱取消按鈕 dismiss
3 配置 imagepicker
4 發(fā)送imagepicker
5 present
6 返回Disposables

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市剩失,隨后出現(xiàn)的幾起案子屈尼,更是在濱河造成了極大的恐慌册着,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脾歧,死亡現(xiàn)場離奇詭異甲捏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)鞭执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門司顿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兄纺,你說我怎么就攤上這事大溜。” “怎么了囤热?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵猎提,是天一觀的道長。 經(jīng)常有香客問我旁蔼,道長锨苏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任棺聊,我火速辦了婚禮伞租,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘限佩。我一直安慰自己葵诈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布祟同。 她就那樣靜靜地躺著作喘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪晕城。 梳的紋絲不亂的頭發(fā)上泞坦,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音砖顷,去河邊找鬼贰锁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛滤蝠,可吹牛的內(nèi)容都是我干的豌熄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼物咳,長吁一口氣:“原來是場噩夢啊……” “哼锣险!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤囱持,失蹤者是張志新(化名)和其女友劉穎夯接,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纷妆,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盔几,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掩幢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逊拍。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖际邻,靈堂內(nèi)的尸體忽然破棺而出芯丧,到底是詐尸還是另有隱情,我是刑警寧澤世曾,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布缨恒,位于F島的核電站,受9級特大地震影響轮听,放射性物質(zhì)發(fā)生泄漏骗露。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一血巍、第九天 我趴在偏房一處隱蔽的房頂上張望萧锉。 院中可真熱鬧,春花似錦述寡、人聲如沸柿隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禀崖。三九已至,卻和暖如春螟炫,著一層夾襖步出監(jiān)牢的瞬間波附,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工不恭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叶雹,地道東北人财饥。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓换吧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钥星。 傳聞我的和親對象是個(gè)殘疾皇子沾瓦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容