RxSwift:单个可观察到的自我为零

时间:2019-11-27 21:43:02

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

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

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

尝试以下方法:

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,则不必担心自己为零。

相关问题