if or/and else if 语句被传递

Posted

技术标签:

【中文标题】if or/and else if 语句被传递【英文标题】:if or/and else if statement being passed over 【发布时间】:2016-01-26 00:24:47 【问题描述】:

我正在为我的应用程序构建一个自定义解析登录,但我无法在我的 loginBTN 操作中执行我的一个 if 语句。一旦我使用 loginSwitch.on == true 按登录,即使我的用户名和密码文本字段为空/nil,它也会转到配置文件视图,即使用最后登录的用户打开应用程序。在我的代码中,我试图让它显示一个警报,要求输入用户名和密码。更令人困惑的是,当调用 else if loginSwitch.on == false 并且 3 个文本字段为空时,我收到了警报消息。请帮助停止“登录”状态下的自动转场/loginSwitch.on == true。

 @IBAction func loginBTN(sender: AnyObject)
    
        if loginSwitch.on == true
        
            if usernameTXTFLD != nil || passwordTXTFLD != nil
            
                PFUser.logInWithUsernameInBackground(usernameTXTFLD.text!, password:passwordTXTFLD.text!) 
                    (user: PFUser?, error: NSError?) -> Void in
                    if user == user
                    
                        dispatch_async(dispatch_get_main_queue(),  () -> Void in
                            self.performSegueWithIdentifier("loginToProfileSegue", sender: self)
                        )
                     else 
                        let errorString = error!.userInfo["error"] as? String
                        self.displayAlert("Log In Failed", message: errorString!)
                    
                
            
            else
            
                self.displayAlert("Log In Failed", message: "Error: Please Provide Unique Username and Password")
            
        
        else
        
            if self.usernameTXTFLD != nil || self.passwordTXTFLD != nil || self.emailTXTFLD != nil
            
                let user = PFUser()
                user.username = usernameTXTFLD.text
                user.password = passwordTXTFLD.text
                user.email = emailTXTFLD.text
                user.signUpInBackgroundWithBlock 
                    (succeeded: Bool, error: NSError?) -> Void in
                    if let _ = error
                    
                        self.displayAlert("Log In Failed", message: "Error: Please Provide Unique Username, Password, and Email Address")
                    
                    else
                    
                        dispatch_async(dispatch_get_main_queue(),  () -> Void in
                            self.performSegueWithIdentifier("loginToProfileSegue", sender: self)
                        )
                    
                

            
            else if usernameTXTFLD == nil || passwordTXTFLD == nil || emailTXTFLD == nil
            
                //Alert - Please provide username, password, and emailaddress
                self.displayAlert("Signup Failed", message: "Error: Please Provide Unique Username, Password, and Email Address")
            
        

    

【问题讨论】:

你是如何连接你的segue的?你是从你的按钮还是从你的 ViewContorller 拖动它的? 我从视图控制器中吸毒。我还在使用 segue 进行 twitter 和 facebook 登录,它们按预期工作。您是否建议只为这个特定按钮制作 1 个独特的 segue? 【参考方案1】:

您有一些问题。您的几个nil 检查不正确,您正在检查文本字段本身是否为nil,而不是检查文本字段中是否有任何文本。

if loginSwitch.on == true

    if usernameTXTFLD.text!.isEmpty == false && passwordTXTFLD.text!.isEmpty == false
    
        PFUser.logInWithUsernameInBackground(usernameTXTFLD.text!, password:passwordTXTFLD.text!) 
            (user: PFUser?, error: NSError?) -> Void in
            if user == user
            
                dispatch_async(dispatch_get_main_queue(),  () -> Void in
                    self.performSegueWithIdentifier("loginToProfileSegue", sender: self)
                )
             else 
                let errorString = error!.userInfo["error"] as? String
                self.displayAlert("Log In Failed", message: errorString!)
            
        
    
    else
    
        self.displayAlert("Log In Failed", message: "Error: Please Provide Unique Username and Password")
    

else

    if self.usernameTXTFLD.text!.isEmpty == false && self.passwordTXTFLD.text!.isEmpty == false && self.emailTXTFLD.text!.isEmpty == false
    
        let user = PFUser()
        user.username = usernameTXTFLD.text
        user.password = passwordTXTFLD.text
        user.email = emailTXTFLD.text
        user.signUpInBackgroundWithBlock 
            (succeeded: Bool, error: NSError?) -> Void in
            if let _ = error
            
                self.displayAlert("Log In Failed", message: "Error: Please Provide Unique Username, Password, and Email Address")
            
            else
            
                dispatch_async(dispatch_get_main_queue(),  () -> Void in
                    self.performSegueWithIdentifier("loginToProfileSegue", sender: self)
                )
            
        

    
    else
    
        //Alert - Please provide username, password, and emailaddress
        self.displayAlert("Signup Failed", message: "Error: Please Provide Unique Username, Password, and Email Address")
    

【讨论】:

它告诉我类型“String”没有成员“length”,有没有更好的方法来确定长度或字符? 将其转换为 NSString,或者您也可以使用 text?.characters.count > 1 那是我的 Objective-C 展示。看我的更新。我认为这会奏效。 成功了。不过,您对?!s 的看法是正确的。这是我必须使用的......if usernameTXTFLD.text!.isEmpty == false && passwordTXTFLD.text!.isEmpty == false谢谢。

以上是关于if or/and else if 语句被传递的主要内容,如果未能解决你的问题,请参考以下文章

python3之条件判断

(Unity)如何传递变量,没有一堆If Else语句的变量

通过if else语句将值传递给数据库

Python 3:即使 `if` 语句为真,`else` 语句也会被执行

练习--第一次课(运算if while 字符编码)

If-else语句基于先前的活动选择来获取共享偏好