带标签栏控制器的RxSwift

今天,我们将讨论如何在Tab Bar Controlled应用程序中实现RxSwift,并了解响应式编程的魔力🙂

我将尝试尽可能详细地解释RxSwift的基础。

让我们转到RxSwift的github repo并将其安装在我们的应用程序中。

我将项目命名为RxSwiftExample,并且将使用cocoapods将其安装为:

  #取消注释下一行以定义项目的全局平台 
#platform:ios,'9.0'target'RxSwiftExample'做
#如果您不使用Swift并且不想使用动态框架,请注释下一行
use_frameworks!
pod'RxSwift','〜> 4.0'
pod'RxCocoa','〜> 4.0'
#RxSwiftExampleend的广告连播

现在转到情节提要,然后将ViewController嵌入到选项卡栏控制器中。 然后将另一个ViewController添加到场景中。 控制从选项卡栏控制器拖动到新的vc,并将关系设置为视图控制器。

然后为标签栏项目提供一些随机项目,以便可以在标签栏中进行区分。 (我将使用“更多”和“搜索”标签栏项目)

到目前为止,您的情节提要应该看起来像这样:

创建一个UIViewController的可可触摸类,并将其命名为UserViewController.swift,并在情节提要中将新的vc的Class设置为UserViewController。

由于本文将主要关注RxSwift,因此我不会花太多时间来解释UI组件,约束等。

然后从对象库中拖动一个表视图并插入到User vc中,为其赋予0–0–0–0约束。 然后转到属性检查器,并给其提供原型单元格,其标识符为“单元格”。 控制从tableView拖动到vc,并设置其数据源和委托属性。 打开助手编辑器,然后将控件从表视图拖动到UserViewController.swift并作为tableView进行引用。

然后在第一个vc中添加三个标签,对其施加一些约束,打开助手编辑器,并从情节提要中获取对nameController,ageLabel,cityLabel的引用,以指向故事板。

现在该创建模型了。 创建一个名为User的快捷文件,然后复制下面的代码。


现在该使我们的应用程序更有趣了。 转到您的UserViewController并在课程开始时在下面声明变量

  var userToShowInFirstVc =变量(用户(名称:“ Alex”,年龄:25,城市:“慕尼黑”))var userToShowInFirstVcObservable:Observable  { 
返回userToShowInFirstVc.asObservable()
} var userArray =变量([User]())var userArrayObservable:Observable {
返回userArray.asObservable()
}

在这里,我们创建了两个变量及其可观察对象,分别为userToShowInFirstVC和userArray,第一个是用户变量,我们将在第一个vc中显示其详细信息。 我们以用户Alex作为占位符用户开始。

userArray是由Users组成的数组。 我们将使用来自userArray的用户填充tableView。

让我们创建一个将Users添加到我们的userArray的方法:

由于我们的userArray也是RxSwift变量,因此当我们想要进行更改或获取其引用时,我们需要以userArray.value的形式获取它的值。 在viewDidLoad()中调用此方法

实现tableView方法:

您可能已经猜到,除didSelectRowAt之外的所有方法都已实现。 我们只是用我们的用户填充tableView。

但是在didSelectRowAt中,我们使userToShowInFirstVC的值等于tableView中选定的用户。

目前在UserViewController中一切都很好,但是我们的第一个vc尚未更新。 因此,让我们打开ViewController并修复它。

创建一个新的subscriptionToUsers()方法:

  1. 首先,通过将其转换为UserViewController,将第二个vc作为tabBarController的最后一个vc。 然后,我们订阅userToShowInFirstVcObservable以获取选定的用户。
  2. 然后,使第一个vc中的用户等于第二个vc中的选定用户。

在configureLabels()方法之后,在viewDidLoad中调用此函数。

现在运行您的项目并播放。 您可以看到,当我们在第二个选项卡中选择一个用户时,由于RxSwift的订阅,第一个选项卡中的信息会更新🙂

对不起,gif非常大,我无法缩小它🙁

这是我的第一篇中篇文章,因此对您有很多想法,如果您对我如何改善写作方式有任何想法,请在下面的评论中告诉我。

单击此处查看土耳其语版本。

完整的github仓库可以在这里找到!

资源:

ReactiveX / RxSwift

RxSwift – Swift中的反应式编程

github.com