Ваш makeRepoRequest()
определен неправильно. Одноразовый материал, который вы создаете внутри крышки, должен быть тем, который вы возвращаете. Там не должно быть никакого disposeBag, также вам нужно развернуть себя и убедиться, что что-то испускается, если self не существует, также, если вы собираетесь хранить кеш в temp
, вам действительно следует назначить ему .. .
func makeRepoRequest() -> Single<[String: Any]> {
return Single<[String: Any]>.create { [weak self] observer in
guard let this = self else {
observer(.error(MyError.missingSelf))
return Disposables.create()
}
guard !this.temp.isEmpty else {
return this.getRepo("364").subscribe(onSuccess: { content in
this.temp = content
observer(.success(content))
}, onError: { error in
observer(.error(error))
})
}
observer(.success(this.temp))
return Disposables.create()
}
}
Однако, поскольку вы просто излучаете content
без изменений, вам даже не нужно использовать .create(_:)
. Итак, что-то вроде этого:
func makeRepoRequest() -> Single<[String: Any]> {
if !temp.isEmpty {
return getRepo("364")
.do(onSuccess: { [weak self] in self?.temp = $0 })
}
else {
return Single.just(temp)
}
}
Наконец, вы неправильно отменяете свой сетевой запрос в вашем методе getRepo(_:)
. Он должен заканчиваться на return Disposables.create { task.cancel() }
Я предлагаю вам прочитать больше об одноразовых предметах.