首页 > 解决方案 > RxSwift:单个可观察自我为零

问题描述

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

我会非常感谢你的帮助。

标签: iosrx-swiftxcode11.2swift5.2

解决方案


您在创建闭包中使用weakcapture for ,因此除非您对对象持有强引用,否则一旦您离开分配上下文,它将被释放。selfSingleDoctor

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

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

推荐阅读