如何在mvvm

时间:2018-07-27 06:40:29

标签: ios

我需要检查用户名,联系电话和电子邮件ID的有效性。我正在使用mvvm。

为此

我的模型:-

class CF_Page1Model: NSObject {

    var name:String!
    var contactno:String!
    var emailid:String!


    init?(dictionary :JSONDictionary) {

        guard
            let name = dictionary["name"] as? String,
            let contactno = dictionary["contactno"] as? String,
            let emailid = dictionary["emailid"] as? String

                       else {
                return

        }

        self.name = name
        self.contactno = contactno
        self.emailid  = emailid

    }


}

我的数据源模型:-

class CF_Page1DataSourceModel: NSObject {

var dataListArray:Array<CF_Page1Model>? = []

init(array :Array<[String:Any]>?) {
    super.init()
    var newArray:Array<[String:Any]> = []
    if array == nil{

    }
    else{
        newArray = array!

    }

    var datalist:Array<CF_Page1Model> = []
    for dict in newArray{

        let model = CF_Page1Model(dictionary: dict)

        datalist.append(model!)
    }
    self.dataListArray = datalist
}

}

我的视图模型:-

class CF_Page1ViewModel: NSObject {


    var datasourceModel:CF_Page1DataSourceModel
    var emailid:Bool?
    var phonenumber:Bool?

    var nameofperson:Bool?


    var name:String?
    var age:Int?
    var contactno:String?
    var email:String?
    var gender:String?



    init(withdatasource  newDatasourceModel:CF_Page1DataSourceModel) {
        datasourceModel = newDatasourceModel
        print(datasourceModel.dataListArray)
    }



   func isValidEmail(testStr:String)->Bool{
        print("validate emilId: \(testStr)")
        let emailRegEx = "^(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?(?:(?:(?:[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+(?:\\.[-A-Za-z0-9!#$%&’*+/=?^_'{|}~]+)*)|(?:\"(?:(?:(?:(?: )*(?:(?:[!#-Z^-~]|\\[|\\])|(?:\\\\(?:\\t|[ -~]))))+(?: )*)|(?: )+)\"))(?:@)(?:(?:(?:[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[-A-Za-z0-9]{0,61}[A-Za-z0-9])?)*)|(?:\\[(?:(?:(?:(?:(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))\\.){3}(?:[0-9]|(?:[1-9][0-9])|(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5]))))|(?:(?:(?: )*[!-Z^-~])*(?: )*)|(?:[Vv][0-9A-Fa-f]+\\.[-A-Za-z0-9._~!$&'()*+,;=:]+))\\])))(?:(?:(?:(?: )*(?:(?:(?:\\t| )*\\r\\n)?(?:\\t| )+))+(?: )*)|(?: )+)?$"
        let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegEx)
        let result = emailTest.evaluate(with: testStr)
        print(result)
        emailid = result
        return emailTest.evaluate(with: testStr)

    }






    func validate(value: String){

        let PHONE_REGEX =  "[235689][0-9]{6}([0-9]{3})?"
        let phoneTest = NSPredicate(format: "SELF MATCHES %@", PHONE_REGEX)
        let result1 =  phoneTest.evaluate(with: value)
        print(result1)
        // phoneTest = result
        phonenumber = result1



    }

    func isValidInput(Input:String)  {
        let RegEx = "\\A\\w{7,18}\\z"
        let Test = NSPredicate(format:"SELF MATCHES %@", RegEx)
        let username = Test.evaluate(with: Input)
        print(username)
        nameofperson = username
        print(nameofperson)


    }



}

和ViewController :-

在该提交按钮中:-

 @IBAction func forward(_ sender: AnyObject) {



        self.page1ViewModel.name = nametext.text
        self.page1ViewModel.contactno = contactnotext.text
        self.page1ViewModel.email = emailidtext.text

        self.page1ViewModel.isValidInput(Input: self.page1ViewModel.name!)
        self.page1ViewModel.validate(value: self.page1ViewModel.contactno!)
        self.page1ViewModel.isValidEmail(testStr: self.page1ViewModel.email!)

        page1ViewModel.loadFromWebserviceData()
    }

在ViewController中

按钮操作:-

 @IBAction func forward(_ sender: AnyObject) {



        self.page1ViewModel.name = nametext.text
        self.page1ViewModel.contactno = contactnotext.text
        self.page1ViewModel.email = emailidtext.text

        self.page1ViewModel.isValidInput(Input: self.page1ViewModel.name!)
        self.page1ViewModel.validate(value: self.page1ViewModel.contactno!)
        self.page1ViewModel.isValidEmail(testStr: self.page1ViewModel.email!)

        page1ViewModel.loadFromWebserviceData()
    }

这里的名称,contactno,emailid是文本字段,我使用了post方法。但是在提交按钮上,我需要验证nametext,contactnotext和emailidtext。如何在mvvm中进行操作。在模型中需要进行哪些更改? / p>

1 个答案:

答案 0 :(得分:0)

验证逻辑将进入viewmodel类。

从操作中删除以下代码:

    self.page1ViewModel.isValidInput(Input: self.page1ViewModel.name!)
    self.page1ViewModel.validate(value: self.page1ViewModel.contactno!)
    self.page1ViewModel.isValidEmail(testStr: self.page1ViewModel.email!)

    page1ViewModel.loadFromWebserviceData()

编写另一个方法来验证viewmodel中的所有字段,这将返回bool:

func validateEntries() -> Bool {
    guard let name = self.name else {
      return false
    }
     guard let contactno = self.contactno else {
      return false
    }
    guard let email = self.email else {
      return false
    }
    let nameValid = self.isValidInput(Input: name)
    let contactnoValid = self.validate(value: contactno)
    let isEmailValid = self.isValidEmail(testStr: email)

    return nameValid && contactNoValid && isEmailValid
}

并在视图控制器中:实际上,只要调用此函数,则返回true,然后调用api,否则会相应显示任何验证消息。

希望有帮助...

相关问题