我有一个结构,
struct State {
let email: String
let phoneNumber: String
}
我从上一个类传递此值,如
class.State(email: "email", phoneNumber: "021000000")
现在,我将这些分配给文本字段,如果用户编辑,则在shouldChangeCharactersIn
中完成验证。
我想在struct for email和phoneNumber中进行验证 并使用闭包返回结果。 (因为只有在属性有效时才会将此更新的结构传递给其他类以启用我的按钮。)
我无法在我的struct中调用验证方法。
如何在struct中验证struct属性或访问类方法?我走向正确的方向,我很困惑?
答案 0 :(得分:0)
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingText = textField.text as NSString?
let changedText = existingText?.replacingCharacters(in: range, with: string)
update(withChangedText: changedText) //Update model and do your validation, example enable / disable Done button
return true
}
答案 1 :(得分:0)
由于结构的两个字段都是不可变的,因此您只需在结构的初始值设定项中进行验证即可。您应该创建一个可用的初始化程序,如果验证失败,它将失败。
struct State {
let email: String
let phoneNumber: String
init?(email:String,phoneNumber:String) {
//Do your own validation here
if (email.contains("@") && phoneNumber.count == 9){
self.email = email
self.phoneNumber = phoneNumber
} else {
return nil
}
}
}
State(email: "a@b.com", phoneNumber: "123456789") // creates a State instance
State(email: "ab.com", phoneNumber: "123") //nil
您可以通过将用户输入作为输入参数提供给shouldChangeCharactersIn
的初始化程序并检查返回值是否为State
来验证nil
中的用户输入。