Tag: Reactorkit

iOS App Swift初学者,带有示例应用程序,架构简洁

Clean Swift或Clean Architecture是适用于iOS和Mac项目的体系结构。 Clean Swift体系结构不是框架。 它是一组Xcode模板,可以为您生成Clean Architecture组件。 这意味着您可以自由修改模板以适合您的需求。 因此,如果我们要更改某些内容,则它不会影响其他文件,因为它基于图层。 Swift是用于macOS,iOS,watchOS和tvOS的功能强大且直观的编程语言。 编写Swift代码是交互式且有趣的,语法简洁而又富有表现力,并且Swift包含开发人员喜欢的现代功能。 Swift代码在设计上是安全的,但也可以生成运行闪电般快的软件。 Swift已经支持所有Apple平台以及Linux,社区成员正在积极努力移植到更多平台。 传统建议使用新语言的第一个程序应在屏幕上打印“ Hello,world!”字样。 在Swift中,这可以单行完成: 打印(“你好,世界!”) Swift语法类似于C或Objective-C。 在全局范围内编写的代码用作该程序的入口点,因此您不需要main()函数。 您也不需要在每个语句的末尾写分号。 使用let来使常量或var来使变量。 常量的值不需要在编译时就知道,但是您必须为它赋值一次。 常量或变量的类型必须与要分配给它的值的类型相同。 var myVariable = 42 myVariable = 50 让myConstant = 42 使用SnapKit的Swift SnapKit具有清晰简洁的API,可轻松编写代码中的约束。 所以 安装 我们将使用CocoaPods安装SnapKit。 CocoaPods是Swift和Objective-C Cocoa项目的依赖项管理器。 它拥有超过51,000个库,并在超过300万个应用程序中使用。 CocoaPods可以帮助您优雅地扩展项目。 #Xcode 8 + 9 $ sudo gem install cocoapods 然后在Xcode项目目录中,打开位于项目目录位置的终端并输入: 荚初始化 然后在项目目录中,您将看到一个需要添加的podfile: 吊舱“ […]

使用ReactorKit,Quick&Nimble,RxBlocking,Swift 4.1在iOS中进行单元测试

入门 我们将使用RxBlocking来验证Reactor(ViewModel)的状态。 我们还将使用Stubber 模拟我们的网络请求。 最后,您的Podfile应该包含以下内容: def development_pods 吊舱“ ReactorKit” 吊舱“ RxSwift” 豆荚“ RxCocoa” 结束 def testing_pods pod’RxBlocking’ 吊舱“ Stubber” 豆荚“快速” Pod’Nimble’ 结束 简单的测试流程 一个简单的流程可能涉及将一个Action发送到您的Reactor并测试以下内容: 状态更新:在执行操作以验证Reactor逻辑时检查每个状态变量的更新。 执行次数:确保对网络请求和其他函数调用进行了正确的次数。 确保状态发出正确的次数。 初始设置 我将以下文件夹结构用于测试: 存根存储库:存储库是公开公共方法的结构,您可以使用这些方法通过网络请求获取数据。 存根存储库文件夹包含使用存根创建的模拟存储库。 ReactorTests:包含ViewModel / Reactor测试。 存根 使用Stubber模拟您的网络请求非常容易。 您还可以通过使用以下命令来验证存根方法的执行计数 Stubber.executions(signIn).count 单元测试 为了测试Reactor内部的逻辑,我们需要将Reactor视为黑匣子。 我将提供一个动作作为输入,并获得UI状态作为输出。 下面,我使用一些无效参数触发signIn操作,理想情况下,在Reactor中以同步方式进行验证后,理想情况下应该发出error状态。 我将使用RxBlocking阻止代码流,直到可观察到的state发出一个事件为止。 注意使用.delay()运算符。 没有它,在执行第7行的阻塞语句之前,可能会丢失一些事件。 订阅流后, state会发出一个事件,通常是应该跳过的先前状态。 skip(1)可以帮助您。 使用take(1)完成一次发射后的流。 否则,RxBlocking将永远不允许语句失败。 如果状态在5秒钟内未发出,则RxTimeoutException会引发RxTimeoutException,并且测试用例会自动失败。 提取状态后, Nimble用于验证状态变量的值是否符合期望。 在所有期望都得到验证后,流将立即处理掉。 如果有多个国家排放怎么办? […]