1

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

我会非常感谢你的帮助。

4

2 回答 2

3

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

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

func amICrazy() -> Bool {
    return Bool.random() // or just .random()
}
于 2019-11-27T21:50:10.743 回答
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
}

如果你没有 a self,你就不必担心 self 是 nil。

于 2019-11-28T12:19:00.903 回答