在几乎每个应用程序中,您都将需要联网。 我们如此努力,以至于一段时间后它变成了第二自然。 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。