iOS-RAC实战1-登录

ios_rac_demo1_login.md

iOS-RAC实战1-登录

RAC介绍

RAC是Github写的一套函数响应式编程的iOS实现,它不仅在实现层为大家提供了一个新的思路,也给架构层带来了变化。具体可以查看Limboy的两篇博客:《说说ReactiveCocoa 2》和《ReactiveCocoa与Functional Reactive Programming》。

我本人也是从Limboy的两篇博客开始看起来的,不过单纯走马观花的看,并没有深刻理解RAC的精髓,总有一种“这东西看起来挺好,但是用起来不知如何?”的感觉。所以从这一篇开始,我将集中为大家使用RAC来构建一些iOS开发中常见的场景,使大家对RAC的理解更快一些。

本例介绍

本例主要实现登录页的功能,这是大家在iOS中经常需要开发的一个功能,我将全面的将分析、设计、实现的过程展示给大家,所有观点都是个人观点,如果大家有更好的设计与实现,欢迎与我交流。

用到的RAC类和接口

RACSubject类

Subject类是一个自由度很高的信号,它表示一个延迟加载并且延迟更新的对象,通过sendNext:方法,任何的线程可以在任何的时机改变Subject的值,通过多个订阅者又可以监听这一个值的变化。

RACReplySubject类

当有新的订阅者的时候,Subject的last值并不会send给新的订阅者,这可能并不是我们想要的,而一个ReplySubject会保持你想要的最后几个值,在新的订阅者订阅的时候发送给它。

实战开始

创建默认工程

我创建了一个使用Cocoapods、RAC、Storyboard、Calabash的项目放在Code上,地址:https://code.csdn.net/zangcw/rac_default_project,如果你想要自己创建一个这样的项目,可以参考我的另一篇博客使用Jenkins+Calabash+Cocoapods搭建iOS持续集成环境

写测试用例

我们将使用BDD来完成开发,所以先要有测试用例,修改my_first.feature文件名为login.feature,然后写下这些内容

# language: zh-CN
功能: 登录
  作为一个用户,
  尝试输入正确与不正确的用户名密码,测试是否符合预期。

场景: 基准测试
  假如应用正在运行
  那么我应该看到"登录"按钮
  并且我应该看到"请输入用户名"文本框
  并且我应该看到"请输入密码"文本框

场景: 正确输入
  假如应用正在运行
  我在第1个文本框中输入"username1"
  并且我在第2个文本框中输入"passwd00"
  并且我点按"登录"
  那么我应该看到"登录中"
  我等到看不见"登录中"
  那么我等
  并且我应该看到"登录成功"

场景: 用户名为空
  假如应用正在运行
  我在第2个文本框中输入"passwd00"
  并且我点按"登录"
  那么我应该看到"登录中"
  我等到看不见"登录中"
  那么我等
  并且我应该看到"请输入用户名"

场景: 密码为空
  假如应用正在运行
  我在第1个文本框中输入"username1"
  并且我点按"登录"
  那么我应该看到"登录中"
  我等到看不见"登录中"
  那么我等
  并且我应该看到"请输入密码"

场景: 用户名错误
  假如应用正在运行
  我在第1个文本框中输入"username2"
  并且我在第2个文本框中输入"passwd00"
  并且我点按"登录"
  那么我应该看到"登录中"
  我等到看不见"登录中"
  那么我等
  并且我应该看到"不存在的用户"

场景: 密码错误
  假如应用正在运行
  我在第1个文本框中输入"username1"
  并且我在第2个文本框中输入"passwd01"
  并且我点按"登录"
  那么我应该看到"登录中"
  我等到看不见"登录中"
  那么我等
  并且我应该看到"密码不正确"

编译程序到命令行执行cucumber,应该看到有6个场景,都失败了,这符合预期(因为我们还什么都没写呢)。接下来我们就设法使这个用例通过。

创建试图

在xcode中打开Main.Storyboard,拖拽1个button,2个label,2个textField控件到屏幕,并且把textField的placeholder设置成用例中要求的文案。

修改后的storyboard应该看起来是这样:



你可能感兴趣的:(IOS开发,iOS的RAC专栏)