Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么rxswift中的concat从不()呢 func注册(uu用户名:字符串,密码:字符串)->可观察{ //这也只是一个玩笑 让signupResult=arc4random()%5==0?false:true 返回可观察值。just(signupResult) .concat(可观察到的.never()) .throttle(0.4,调度程序:MainScheduler.instance) .采取(1) }_Ios_Rx Swift_Reactive - Fatal编程技术网

Ios 为什么rxswift中的concat从不()呢 func注册(uu用户名:字符串,密码:字符串)->可观察{ //这也只是一个玩笑 让signupResult=arc4random()%5==0?false:true 返回可观察值。just(signupResult) .concat(可观察到的.never()) .throttle(0.4,调度程序:MainScheduler.instance) .采取(1) }

Ios 为什么rxswift中的concat从不()呢 func注册(uu用户名:字符串,密码:字符串)->可观察{ //这也只是一个玩笑 让signupResult=arc4random()%5==0?false:true 返回可观察值。just(signupResult) .concat(可观察到的.never()) .throttle(0.4,调度程序:MainScheduler.instance) .采取(1) },ios,rx-swift,reactive,Ios,Rx Swift,Reactive,我在中看到一些代码,但我不明白为什么需要concat(Observable.never())这只是一个示例。FUI,决不创建一个不发射任何项目且不终止的可观察对象(描述自)我自己也在理解这一点,所以对此持保留态度:) 可观察。只需发出一次值并立即完成;它几乎不需要任何时间 .throttle(0.4,调度器:MainScheduler.instance)在序列中引入时间,用0.4s+确定要返回的值,然后 concat(Observable.never())使输入序列长时间运行,因此节流阀首先有

我在中看到一些代码,但我不明白为什么需要
concat(Observable.never())
这只是一个示例。FUI,
决不
创建一个不发射任何项目且不终止的可观察对象(描述自)

我自己也在理解这一点,所以对此持保留态度:)

  • 可观察。只需
    发出一次值并立即完成;它几乎不需要任何时间
  • .throttle(0.4,调度器:MainScheduler.instance)
    在序列中引入时间,用0.4s+确定要返回的值,然后
  • concat(Observable.never())
    使输入序列长时间运行,因此
    节流阀
    首先有一些事情要做
现在
返回Observable.just(signupResult)
就足以实现该函数了。剩下的有什么用

其他三个操作员导致延迟。由于连接的可观察对象是永无止境的,
throttle
将至少等待0.4秒一次,以确定为第一个节流的“块”发出哪个值<代码>取(1)然后在0.4s后发出第一个值后完成序列


对我来说,这似乎是一种很难实现延迟响应的方法:)

来自@ctietze的答案似乎是正确的。但是在做了一个测试之后,我意识到
油门
扼杀了整个概念。
基本上,
throttle
将在可观察到的启动后立即返回值。这意味着它不会等到
0.4s
才发出第一个值

func signup(_ username: String, password: String) -> Observable<Bool> {
    // this is also just a mock
    let signupResult = arc4random() % 5 == 0 ? false : true
    return Observable.just(signupResult)
        .concat(Observable.never())
        .throttle(0.4, scheduler: MainScheduler.instance)
        .take(1)
 }

谢谢,我知道
never
的用法,所以我不明白为什么要使用never(),所以这只是个例子~
func testWithThrottle() -> Observable<Int> {
        return
            Observable.just(7) // 1
                .concat(Observable.never()) // 2
                .throttle(3.0, scheduler: Schedulers.background) // 3
                .take(1) // 4

        // 1. -7--|->
        // 2. -7------------------------------->
        // 3. -7------------------------------->
        // 4. -7--|->
}

...

print("[\(Date())] Start!")
testWithThrottle().subscribe({ (event) in
    print("[\(Date())] event: \(event)")
}).addDisposableTo(disposeBag)
print("[\(Date())] End!")

...

[2017-06-03 03:14:00 +0000] Start!
[2017-06-03 03:14:00 +0000] event: next(7)
[2017-06-03 03:14:00 +0000] event: completed
[2017-06-03 03:14:00 +0000] End!
func testWithDebounce() -> Observable<String> {
        return
            Observable.of("A") // 1
                .concat(Observable.never()) // 2
                .debounce(3.0, scheduler: Schedulers.background) // 3
                .take(1) // 4

        // 1. -A-|->
        // 2. -A------------------------------>
        // 3. ---------------A---------------->
        // 4. ---------------A-|->
}

...

[2017-06-03 03:24:21 +0000] Start Thrrotle!
[2017-06-03 03:24:21 +0000] Finish Thrrotle!
[2017-06-03 03:24:24 +0000] event: next(A)
[2017-06-03 03:24:24 +0000] event: completed