1
我昨天開始學習Swift for IOS,並試圖製作一個簡單的登錄應用程序。這是我的快捷文件Swift回調更改UIViewController標籤
import Foundation
import SwiftHTTP
func printSomething (sentence: String) {
println(sentence);
}
func makeLoginCall(user: String, pwd: String, doneFunction : (Bool) -> Void) {
var url : String = "myurl"
var request = HTTPTask()
request.requestSerializer = JSONRequestSerializer()
request.responseSerializer = JSONResponseSerializer()
request.POST(url,
parameters : ["username": user, "password": pwd],
success: {(response: HTTPResponse) in
if let dict = response.responseObject as? Dictionary<String, AnyObject> {
println("\(dict)")
doneFunction(true)
}
}, failure: {(error: NSError, response: HTTPResponse?) in
println("error \(error)")
doneFunction(false)
})
}
,這是我的ViewController
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var userTextField: UITextField!
@IBOutlet weak var passTextField: UITextField!
@IBOutlet var resultLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func loginButtonCallback(sender: AnyObject) {
checkLogin()
}
func checkLogin() {
var user : String = userTextField.text
var pass : String = passTextField.text
makeLoginCall(user, pass, printResult)
}
func printResult(result: Bool) -> Void {
println("print result function started")
if (result) {
resultLabel.text = "Login done"
} else {
resultLabel.text = "Login wrong"
}
}
}
現在printResult函數被調用但標籤不會改變。 什麼問題?
太棒了!現在它可以工作。但是,這是做到這一點的正確方法嗎? –
由於您是通過使用異步函數調度它的,所以這確實是一條可行的路。你也可以(如克里希納所建議的那樣)將調度函數放入你的doneFunction中,這將使得你只需要一次調度代碼。 – milo526