我需要检查用户名,联系电话和电子邮件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>
答案 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,否则会相应显示任何验证消息。
希望有帮助...