我正在尝试实现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
为零或如何解决?
非常感谢您的帮助。
答案 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
,则不必担心自己为零。