我在这里有一个代码,每次运行它时,只有陈述“所有字段都是必需的” if语句起作用,但并非只有在必须调用它时才起作用,它实际上代替了其他语句。因此,即使所有字段都已填写,无论我做什么,我都将“所有字段均为必填”作为警报消息。 这是代码,感谢所有帮助,谢谢。
import UIKit
class RegisterPageViewController: UIViewController {
@IBOutlet weak var userEmailTextField: UITextField!
@IBOutlet weak var userPasswordTextField: UITextField!
@IBOutlet weak var repeatPasswordTextField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func registerButtonTapped(_ sender: AnyObject) {
let userEmail = ""
let userPassword = ""
let userRepeatPassword = ""
// Check for empty fields
if (userEmail.isEmpty || userPassword.isEmpty ||
userRepeatPassword.isEmpty)
{
// Display Alert Message
displayMyAlertMessage(userMessage:"All fields are required")
return
}
//Check if passwords match
if (userPassword != userRepeatPassword)
{
// Display an alert message
displayMyAlertMessage(userMessage:"Passwords do not match")
return
}
// Store data
UserDefaults.standard.set(userEmail, forKey:"userEmail")
UserDefaults.standard.set(userEmail, forKey:"userPassword")
UserDefaults.standard.synchronize()
// Display alert message with confirmation
_ = UIAlertController(title:"Alert", message:"Registration is
successfull. Thank you!",
preferredStyle:UIAlertControllerStyle.alert);
_ = UIAlertAction(title:"Ok", style:UIAlertActionStyle.default)
{
action in
self.dismiss(animated: true, completion:nil)
}
}
func displayMyAlertMessage(userMessage:String)
{
let myAlert = UIAlertController(title:"Alert", message: userMessage,
preferredStyle:UIAlertControllerStyle.alert);
let okAction = UIAlertAction(title:"Ok",
style:UIAlertActionStyle.default, handler:nil)
myAlert.addAction(okAction)
self.present(myAlert, animated:true, completion:nil)
}
}
答案 0 :(得分:1)
您是否曾经为userEmail,userPassword,userRepeatPassword分配任何值?在函数开始时将它们初始化为空,看起来它们的值永远不变。
与其在函数中声明它们,不如尝试使用类级别的变量,并将它们链接到Storyboard中的文本字段。
import { DatePipe } from '@angular/common';
providers: [ DatePipe ]
答案 1 :(得分:0)
我怀疑此代码不能正确表示您的实现。您能复制并粘贴未经编辑的registerButtonTapped(_:)
函数吗?
如果是这样,我会同意@unmarshalled:看来您已经用空字符串声明了每个变量的值。如果您发布的代码完全按照上述方式实施,则可能是导致问题的原因。
根据您发布的代码,我还建议您进行以下更改:
从函数范围之外获取电子邮件,密码和repeatPassword:通常,只需直接从UI中拉出电子邮件,密码和repeatPassword,最常见的是从文本字段:userEmailTextField.text
将您的用户默认键以及您拥有的任何其他字符串文字提取到常量文件中是一种很好的做法,并且可以避免不必要的与拼写错误相关的错误。
如果您希望它只是关闭警报,则无需向UIAlertAction添加处理程序。 UIAlterController
将自动被自动关闭:handler参数的默认值为nil
,可以将其省略,很简单:
let okayButton = UIAlertAction(title: "Ok", style: .default)
通常来说,您不想存储对共享实例的引用。但是,在较小的本地范围内这样做比较干净:
let userDefaults = UserDefaults.standard
userDefaults.set(userEmail, forKey:"userEmail")
userDefaults.set(userEmail, forKey:"userPassword")
userDefaults.synchronize()
干杯:)
编辑:
我建议将条件提取到计算属性中以提高可读性,并检查count == 0而不是isEmpty。这样做的好处是您可以使计算的属性更加全面,即,这将检查字符串不是nil还是空。通常,检查计数就足够了,但是覆盖您的基地并没有什么害处。
与当前的UIKit实现一样,UITextField.text
永远不能是nil
。话虽这么说,官方文档并没有明确地做出保证,所以处理它的最好方法是像下面的可选方法一样实现它。
类似这样:
fileprivate var registrationFormCompleted: Bool {
guard username = usernameTextfield.text,
password = passwordTextField.text,
repeat = repeatPasswordTextField.text,
else {
return false
}
return username.count > 0 &&
password.count > 0 &&
repeat.count > 0
}
在使用中它将是:
@IBAction func registerButtonTapped(_ sender: AnyObject) {
// Check for empty fields
if !registrationFormCompleted {
// Display Alert Message
displayMyAlertMessage(userMessage:"All fields are required")
return
}
//....
}
答案 2 :(得分:0)
with t as (select 'aaa|bbb|ccc' as val)
select t.*,
LEFT(val, charindex('|', val) - 1),
SUBSTRING(val, charindex('|', val)+1, len(val) - CHARINDEX('|', reverse(val)) - charindex('|', val)),
REVERSE(LEFT(reverse(val), charindex('|', reverse(val)) - 1))
from t;
val
aaa|bbb|ccc aaa bbb ccc