I have this function which doesn't work, because immediately returns without setting data
func fetchedData() -> String {
var data: String
networkRequest.suscribe(
onNext: {
data = "successful"
},
onError: {
data = "unsuccesful"
}).addDisposableTo(self.disposeBag)
return data
}
How can I make it work? Sorry I am fairly new to RxSwift
答案 0 :(得分:2)
希望这会对你有所帮助。
func fetchedData(isSuccess: @escaping ((Bool) -> Void)) {
networkRequest.suscribe(
onNext: {
isSuccess(true)
},
onError: {
isSuccess(false)
}).addDisposableTo(self.disposeBag)
}
fetchedData { (isSuccess) in
if isSuccess {
print("Successfull")
} else {
print("Unsuccessfull")
}
}
答案 1 :(得分:2)
嗯,实际上你想要实现的是信号量,例如信号量。但是你的方法非常糟糕,因为我相信你误解了RxSwift
和反应式编程的概念。
您需要了解的第一件事是RxSwift中的所有内容都是一个可观察的序列,或者是对可观察序列发出的事件进行操作或订阅的事物。
Arrays
,Strings
或Dictionaries
将转换为RxSwift
中的可观察序列。您可以创建符合Swift标准库中Object
的任何Sequence Protocol
的可观察序列。
您不应在代码func fetchedData() -> String
中使用此类功能。在您的情况下,您可能想要使用类似的东西:
func fetchedData() -> Observable<String> {
return networkRequest.map { _ -> String in
return "Successfull"
}.catchErrorJustReturn("Unsuccessfull")
}
然后,您的代码与反应原则保持一致。您可以将此序列绑定到某些变量,转换它们,共享等等。