像老板一样联网— RxSwift简介

在几乎每个应用程序中,您都将需要联网。 我们如此努力,以至于一段时间后它变成了第二自然。 RxSwift的伟大之处在于,它使联网变得轻而易举,尤其是从JSON解析模型时。

在此示例中,我们将假设您有一个使用connect()方法处理网络的View模型。 我将从Udemy课程提供指向我的一个Gist的链接,该链接将为我们提供一些可使用的JSON。

观测值和订阅

创建可观察对象时,您定义其行为。 事情是存在一个可以观察到的可观察的事物,而当您这样做时,我们的内存就会出现问题。 这就是为什么看起来很奇怪,我们在创建可观察对象时必须返回一次性对象。 这将使我们有机会取消正在做的事情,这在使用网络时特别方便。

单打

单打是更具体的可观察变量,它们返回一个值或一个错误,这在我们的JSON将返回或将出现错误的情况下是完美的。 它确实使用了方便的成功/错误枚举以及模式匹配。


func connect()-> Single {

return Single .create(subscribe:{single in

让url =“ https://gist.githubusercontent.com/isaacmendez/9ef13dfe10f668c2cd433ec1d99f92bc/raw/cd6c72578caa1ba0c4376af40813f1a995ab580e/inspringQuotesDataModel.json”

Observable.from([url])
.map {
让url = URL(string:$ 0)!
返回URLRequest(url:url)
}
.flatMap {
URLSession.shared.rx.response(请求:请求)
}
.subscribe(onNext:{[弱自我]响应,
守卫让json =试试? JSONDecoder()。decode([[[String:String]]。self,from:data)else {

单(.error(URLError.couldNotPullData))

返回
}
 让newTitle = json [0] [“ quote”] ??  “你们都不要引号” 

单(.success(newTitle))
} .disposed(作者:self?.disposeBag)

返回Disposables.create()
})
}

我们首先创建一个String类型的可观察对象-基本上,我们将返回一个字符串以显示并订阅其更改。 我现在不使用Codable了,因为它很容易在解码方法中简单地定义所需的对象,并使它更简单。

我们必须在最后归还一次性用品,并且在那里也可以进行一些整理。 当使用可观察对象完成订阅时,将调用此方法。

首先,我们创建一个URL数组,并在其上映射以返回URL请求,然后使用flatMap,它基本上会在调用后从请求中获取所有响应,并将其缩减为一个可观察的序列。 我们订阅更改并解码数据,就像使用标准JSON解码一样,最后使用我们方便的dispose包来处理订阅。

如您所见,在RxSwift中使用JSON确实很容易,现在我们可以订阅connect()方法并通过使用Driver或Bind来更新我们的UI(如果需要更多控制)。

有关更多信息,请访问www.code-disciple.com。