Я пытаюсь написать функцию входа в swift, которая отправляет запрос HTTP POST на веб-страницу, а затем получает объект JSON в ответ. В этой части я отлично работал; хотя, я немного смущен с моим кодом. Части этого я получил из онлайн-уроков, и я не совсем понимаю это. То, что я хочу сделать, - это вызвать segue для другого представления, когда логин был успешным. Кроме того, при неудачном входе в систему я хочу отобразить UILabel, в котором говорится: «Имя пользователя и пароль не совпадают». Может кто-нибудь помочь объяснить код, который я написал, и сообщить мне, как я могу лучше его реализовать? Спасибо.Swift 3 Функция входа в систему
ViewController:
class ViewController: UIViewController {
@IBOutlet var _username: UITextField!
@IBOutlet var _password: UITextField!
@IBOutlet var _button: UIButton!
@IBOutlet var errorText: UILabel!
@IBAction func loginButtonPress(_ sender: Any) {
let username = _username.text
let password = _password.text
if(username == "" || password == "") {
return
}
DoLogin(username: username!, password: password!)
}
DoLogin Функция:
func DoLogin(username: String, password: String) {
let myUrl = URL(string: "http://MYURL.com");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
let postString = "username=\(username)&password=\(password)";
request.httpBody = postString.data(using: String.Encoding.utf8);
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil
{
print("error=\(error)")
return
}
// Print out response object
print("response = \(response)")
//Convert response sent from a server side script to a NSDictionary object:
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json {
// Access value of username, name, and email by its key
let usernameValue = parseJSON["username"] as? String
let nameValue = parseJSON["name"] as? String
let emailValue = parseJSON["email"] as? String
print("usernameValue: \(usernameValue)")
print("nameValue: \(nameValue)")
print("emailValue: \(emailValue)")
if(usernameValue != nil && nameValue != nil && emailValue != nil) {
//The Login WAS SUCCESSFUL
//This is where I want to perform a segue to another view (like this)
//performSegue(withIdentifier: "loginToMain", sender: self) //This does not work
//Error above is (implicit use of 'self' in closuer; use 'self.' to make capture semantics explicit
}
} else {
//Username and Password do not match
print("Username and password do not match. Please Try again");
//This is what I want to do
self.errorText.isHidden = false
//But nothing happens to the errorText UILabel
}
} catch {
print(error)
}
}
task.resume()
}
Это сработало ОТЛИЧНО! Огромное спасибо за помощь. Я никогда не слышал о DispatchQueue. –