美文网首页
RxSwift(4)问题总结

RxSwift(4)问题总结

作者: 忆痕无殇 | 来源:发表于2019-07-30 21:14 被阅读0次

首先有几个问题记录下:

问题1:为什么点击输入框的时候输出打印了两次
 _ = textFiled.rx.text.subscribe(onNext : { (text)  in
            print("输入%@",text ?? "")
        })
输出结果如下: 输出结果.jpg

不细心根本没发现哈哈,大牛讲的在这总结一下。
原因:第一次是初始化。不用点击就会打印。
command单击显示text进入text的getter方法。


text深入.jpg
 setter: { textField, value in
                // This check is important because setting text value always clears control state
                // including marked text selection which is imporant for proper input 
                // when IME input method is used.
                if textField.text != value {
                    c.text = value
                }
            }

调用text就给textField赋值value。

初始化调用creat.jpg
序列(Observable)的创建闭包creat,绑定关系。observer.on发送信号到subscribe。
系统给内部的UI响应addTarget。
第二次是点击事件响应。
通过* return base.rx.controlPropertyWithDefaultEvents来自于allEditingEvents观察valueChanged*事件。
第二次调用原理.jpg

可以通过skip(1)防止打印初始化那一次。

  _ = textFiled.rx.text.skip(1).subscribe(onNext : { (text)  in
            print("输入%@",text ?? "")
        })
问题2:
//        2:问题2
        _ = Observable<String>.create{ (obserber) ->Disposable in
            obserber.onNext("你好")
            obserber.onCompleted()
            return Disposables.create()
            
            }.subscribe{
                print("订阅到:\($0)")
        }

输出结果

订阅到:next(你好)
订阅到:completed

因为$0是输出的事件方法名。
原因是subscribe直接on返回事件。可以利用枚举值拿到事件名。

 public func subscribe(onNext: ((E) -> Void)? = nil, onError: ((Swift.Error) -> Void)? = nil, onCompleted: (() -> Void)? = nil, onDisposed: (() -> Void)? = nil)
        -> Disposable {
                 ······
                switch event {
                case .next(let value):
                    onNext?(value)
                case .error(let error):
                    if let onError = onError {
                        onError(error)
                    }
                    else {
                        Hooks.defaultErrorHandler(callStack, error)
                    }
                    disposable.dispose()
                case .completed:
                    onCompleted?()
                    disposable.dispose()
                }
            }
            return Disposables.create(
                self.asObservable().subscribe(observer),
                disposable
            )
    }
}

switch $0 {
case .next(let value):
print("next == (value)")
case .error(let error):
print("error == (error)")

            case .completed:
                print("completed ")

            }



相关文章

网友评论

      本文标题:RxSwift(4)问题总结

      本文链接:https://www.haomeiwen.com/subject/ayjirctx.html