这是一个模拟用户注册的程序,你可以在这里下载。
这个 App 主要有这样几个交互:
- 当用户输入户名时,验证用户名是否有效,是否已被占用,将验证结果显示出来。
- 当用户输入密码时,验证密码是否有效,将验证结果显示出来。
- 当用户输入重复密码时,验证重复密码是否相同,将验证结果显示出来。
- 当所有验证都有效时,注册按钮才可点击。
- 当点击注册按钮后发起注册请求(模拟),然后将结果显示出来。
这里需要集成三个服务:
- GitHubValidationService 提供输入验证服务
- Wireframe 提供弹框服务
这个例子目前只提供了这三个服务,实际上这一层还可以包含其他的一些服务,例如:数据库,定位,蓝牙…
ViewModel 需要集成这些服务,并且将用户输入,转换为状态输出:
集成服务:
- API GitHub 网络服务
- validationService 输入验证服务
- wireframe 弹框服务
输入:
- username 输入的用户名
- password 输入的密码
- repeatedPassword 重复输入的密码
- loginTaps 点击登录按钮
输出:
- validatedUsername 用户名校验结果
- validatedPasswordRepeated 重复密码校验结果
- signupEnabled 是否允许登录
- signedIn 登录结果
- signingIn 是否正在登录
在 方法内部,将输入转换为输出。
ViewController 主要负责数据绑定:
将用户行为传入给 ViewModel:
- username 将用户名输入框的当前文本传入
- password 将密码输入框的当前文本传入
- …
将 ViewModel 的输出状态显示出来:
- validatedUsername 用对应的 将用户名验证结果显示出来
- validatedPassword 用对应的 将密码验证结果显示出来
- …
以下是全部的核心代码:
这里还有一个 Driver 版的演示代码,有兴趣的同学可以了解一下。