ios - signInWithLogin 预期表达式

标签 ios swift xcode

我最近从 Swift 2 切换到 Swift 3,我的 signInWithLogin 收到错误消息。我是初学者并尝试阅读此内容,但似乎这行代码并没有真正改变,所以我不确定为什么会出现错误以及如何解决。错误似乎出现在 -> in 所在的位置。这是新东西吗?

import UIKit

class LoginViewController: UIViewController, UITextFieldDelegate {

    let invalidNetwork = "Oh Snap! You Don't Have Internet!"

    @IBOutlet var usernameField: UITextField!
    @IBOutlet var passwordField: UITextField!
    @IBOutlet var loginButton: UIButton!
    @IBOutlet var errorLabel: UILabel!
    @IBOutlet var imageView: UIImageView!

    var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()

    func displayAlert(title: String, message: String) {

        let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
        alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in
            self.dismiss(animated: true, completion: nil)
        }))
        self.present(alert, animated: true, completion: nil)

    }

    override func viewDidLoad() {
        tapOutKeyboard()

        let spacerView = UIView(frame:CGRect(x:0, y:0, width:20, height:10))
        usernameField.leftViewMode = UITextFieldViewMode.always
        usernameField.leftView = spacerView

        let anotherSpacerView = UIView(frame:CGRect(x:0, y:0, width:20, height:10))
        passwordField.leftViewMode = UITextFieldViewMode.always
        passwordField.leftView = anotherSpacerView

        usernameField.delegate = self
        passwordField.delegate = self
    }

    @IBAction func signupButton(_ sender: Any) {
        _ = self.storyboard?.instantiateViewController(withIdentifier: "SignupViewController")
        UIApplication.shared.openURL(URL(string: url.URL)!)
    }
    struct url {
        static let URL = "https://www.udacity.com/account/auth#!/signup"
    }

    @IBAction func loginButton(_ sender: Any) {
        dismissKeyboard()
        self.view.endEditing(true)

        if usernameField.text == "" || passwordField.text == "" {

            displayAlert(title: "Oh Snap!", message: "Something Went Wrong! Try Again!")

        } else {

            activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
            activityIndicator.center = self.view.center
            activityIndicator.hidesWhenStopped = true
            activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.gray
            view.addSubview(activityIndicator)
            activityIndicator.startAnimating()
            UIApplication.shared.beginIgnoringInteractionEvents()

        }
        let spinner = showSpinner()
        UdacityAPI.signInWithLogin(usernameField.text!, password: passwordField.text!) { (user, error) -> in
            spinner.hide()
            if user != nil {

                //Logged In!

                self.performSegue(withIdentifier: "login", sender: self)

                //Present The Map And Tabbed View
                if let tabBarVC = self.storyboard?.instantiateViewController(withIdentifier: "TabBarViewController") {
                    self.present(tabBarVC, animated: true, completion: nil)

                }

            } else {

                self.displayAlert(title: "Failed Logging In!", message: errorMessage)

            }
            if let response = user as? HTTPURLResponse {
                if response.statusCode < 200 || response.statusCode > 300 {
                    self.displayAlert(title: "Try Again Later!", message: "Error!")
                    return
                }
            }
            if let error = error {
                //Network Error
                if error.code == NSURLErrorNotConnectedToInternet {

                    let alertViewMessage = self.invalidNetwork
                    let okActionAlertTitle = "OK"

                    self.presentAlert("Not Online!", message: alertViewMessage, actionTitle: okActionAlertTitle, actionHandler: nil)

                }
            }
        }
    }
}

最佳答案

是的,您在 -> 之后缺少返回类型。查看您的代码,我敢打赌这应该是 Void,但我不能肯定地说,因为我没有您的 API 的文档。

尝试像这样添加 Void:

UdacityAPI.signInWithLogin(usernameField.text!, password: passwordField.text!) { (user, error) -> Void in

关于ios - signInWithLogin 预期表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42254195/

相关文章:

ios - 以前的客户是否仍可以下载开发者帐户已过期的iOS应用?

ios - 如何将自定义 tableViewController 嵌入到其他 viewController

c++ - Swift - 使用 Objective-C 包装器调用 C++ 文件 - 传递 Int 值

ios - 如何在 iOS 6.1 上正确设置 GKSession(蓝牙)

swift - NSWindow "Edited"未显示

c++ - 如何确保用 Xcode 编写的代码(c++)可以在其他平台上编译?

objective-c - 为 tableView 注册 Nib 名称

ios - 当从 UITableView 中删除以编程方式自定义的 UITableViewCell 时,约束会中断

ios - 如何使用 Codable 处理 JSON 响应失败的情况?

ios - 使用 NSURL 的结果填充 UIView