这是一个模拟用户注册的程序,你可以在这里下载。


    这个 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 版的演示代码,有兴趣的同学可以了解一下。