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。
我正在尝试实现 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。