RxSwift:单个可观察自我为零

RxSwift: single observable self is nil

我正在尝试实现 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 为零或如何解决它吗?

非常感谢你的帮助。

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

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

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

试试这个:

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 你不必担心 self 为 nil。