How to get a non-observable value from a function?

时间:2018-04-18 18:00:59

标签: rx-swift

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

2 个答案:

答案 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中的所有内容都是一个可观察的序列,或者是对可观察序列发出的事件进行操作或订阅的事物。 ArraysStringsDictionaries将转换为RxSwift中的可观察序列。您可以创建符合Swift标准库中Object的任何Sequence Protocol的可观察序列。

您不应在代码func fetchedData() -> String中使用此类功能。在您的情况下,您可能想要使用类似的东西:

func fetchedData() -> Observable<String> {
    return networkRequest.map { _ -> String in
      return "Successfull"
    }.catchErrorJustReturn("Unsuccessfull")
}

然后,您的代码与反应原则保持一致。您可以将此序列绑定到某些变量,转换它们,共享等等。