美文网首页
RxSwift 登录模块Service以及ViewContro

RxSwift 登录模块Service以及ViewContro

作者: 溜溜leesin | 来源:发表于2018-06-28 15:04 被阅读28次

使用RxSwift可以很好的处理登录的一些逻辑处理,下面的代码不仅是自己以后可能会复用的也是加深记忆的过程。

登录模块的一些Service

import Foundation

class InputValidator {
    
    //验证是否是合法邮箱地址
    class func isValidEmail(email:String) -> Bool {
        let regex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"
        let predicate = NSPredicate(format: "SELF MATCHES %@", regex)
        let isValid = predicate.evaluate(with: email)
        return isValid
    }
    
    //验证密码长度
    
    class func isValidPassword(password:String) -> Bool {
        
        return password.count >= 8
    }
    
    //验证UIDatePicker输入的日期是否小于当天
    class func isValidDate(date:Date) -> Bool {
        let  calender = NSCalendar.current
        let compare = calender.compare(date,
                                       to: Date(),
                                       toGranularity: .day)
        return compare == .orderedAscending
    }
    
}

在ViewController中的处理。直接上代码

class SignUpViewController: UIViewController {

    @IBOutlet weak var userNameInput: UITextField!
    @IBOutlet weak var passwordInput: UITextField!
    @IBOutlet weak var signBtn: UIButton!
    
    var bag = DisposeBag()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.userNameInput.layer.borderWidth = 1
        self.passwordInput.layer.borderWidth = 1
        
        let emailObservable = self.userNameInput.rx.text.orEmpty
                              .map{ (input:String) -> Bool in
                              return InputValidator.isValidEmail(email: input)
        }
        
        _ = emailObservable.map{ (isValid:Bool) -> CGColor in
            return isValid ? UIColor.green.cgColor : UIColor.clear.cgColor
            }.subscribe(onNext: { (color) in
                self.userNameInput.layer.borderColor = color
            })
        
        
        let passwordObservable = self.passwordInput.rx.text.orEmpty
            .map{ (password:String) -> Bool in
              return   InputValidator.isValidPassword(password: password)
        }
        _ = passwordObservable.map{ (isValid:Bool) -> CGColor in
            return isValid ? UIColor.green.cgColor : UIColor.clear.cgColor
            }.subscribe(onNext: { (color) in
                self.passwordInput.layer.borderColor = color
            })
        
        Observable.combineLatest(emailObservable,passwordObservable) {
            (validEmail:Bool,validPassword:Bool) -> [Bool] in
             return [validEmail,validPassword]
            }.map{ (input:[Bool]) -> Bool in
                return input.reduce(true,{ (x,y) -> Bool in
                 x && y
              })
            }.subscribe(onNext:{(isValid) in
                self.signBtn.isEnabled = isValid ? true : false
            })
    }
}

相关文章

  • RxSwift 登录模块Service以及ViewContro

    使用RxSwift可以很好的处理登录的一些逻辑处理,下面的代码不仅是自己以后可能会复用的也是加深记忆的过程。 登录...

  • RxSwift 中的 retain cycle

    RxSwift 中的 retain cycle case 1: 这种情况是最常见的一种,因为 viewContro...

  • 登录模块的设计

      最近做完系统登录模块的重构,登录这块的核心在于安全的控制。下面通过本文来总结一下登录模块的设计实现,以及哪些方...

  • 11.3.UINavigationController

    总结:页面的跳转,以及模态。 //一、ViewController.swift: // // ViewContro...

  • RxSwift(7)-调度者

    前言 scheduler,也称为调度者,作为RxSwift的四大核心之一,是RxSwift实现多线程的核心模块,它...

  • 从零开始Gin Web+Vue商城的搭建(三)-- sessio

    用户和session模块以及登录功能,大概思路是这样的1)用户密码登录时,在后台的req中记住session.2)...

  • 使用RxSwift开发登录注册忘记密码模块总结

    刚好有新的项目,就把登录这一块的逻辑全部用RxSwift去写了,用很少的代码量实现了所有的逻辑,这就是RxSwif...

  • RxSwift调度者-scheduler源码解析(上)

    RxSwift 探索了几天,今天晚上会迎来同学们会疑虑比较多,平时比较好奇的模块 - RxSwift调度者 - s...

  • 登录注册修改密码

    1.为什么要设计登录注册修改密码模块 2.登录注册修改密码模块分类 3.如何设计登录注册修改密码模块 4.登录注册...

  • 本周工作总结

    本周测试裤兜语文教师端,解决测出来的问题。新增活动管理功能,游客登录以及游客登录后的权限管理功能。熟悉招生模块。 ...

网友评论

      本文标题:RxSwift 登录模块Service以及ViewContro

      本文链接:https://www.haomeiwen.com/subject/putxsftx.html