【问题标题】:RxSwift: single observable self is nilRxSwift:单个可观察自我为零
【发布时间】:2019-11-27 21:43:02
【问题描述】:

我正在尝试实现RxSwift 单个可观察对象:

class Doctor {
    var disposeBag = DisposeBag()

    func sanityCheck() -> Single<String> {
        return Single<String>.create {[weak self] observer in
            if self?.amICrazy() == true {
                observer(.success("Yes, you are crazy"))
            }else {
                observer(.error(someError.notCrazy))
            }
            return Disposables.create()
        }
    }

    func amICrazy() -> Bool {
        return arc4random_uniform(2) == 0
    }
}

self 的问题始终为零。

你们中的任何人都知道为什么self 为零或者如何解决它?

非常感谢您的帮助。

【问题讨论】:

  • 请在您调用Doctor.sanityCheck()的地方添加代码

标签: ios rx-swift xcode11.2 swift5.2


【解决方案1】:

您在 Single 的创建闭包中使用 weak 捕获 self,因此除非您对您的 Doctor 对象持有强引用,否则它将在您离开分配上下文后立即被释放。

顺便说一句,在最新的 swift 中,您可以使用 Bool.random() 获取随机布尔值。

func amICrazy() -> Bool {
    return Bool.random() // or just .random()
}

【讨论】:

    【解决方案2】:

    试试这个:

    func sanityCheck() -> Single<String> {
        func amICrazy() -> Bool {
            return Bool.random()
        }
        return Single<String>.create { observer in
            if amICrazy() {
                observer(.success("Yes, you are crazy"))
            }else {
                observer(.error(SomeError.notCrazy))
            }
            return Disposables.create()
        }
    }
    
    enum SomeError: Error {
        case notCrazy
    }
    

    如果您没有self,您不必担心自己为零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      相关资源
      最近更新 更多