【发布时间】:2015-01-08 01:22:22
【问题描述】:
@IBOutlet var nameLabel : UILabel!
var finalString: String = "test"
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func helloWorldAction(nameTextField: UITextField) {
//fetch data from server
let request = NSMutableURLRequest(URL: NSURL(string: "http://192.168.1.11")!)
request.HTTPMethod = "POST"
let postString = "user=test&pass=test3"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
//error handeling
if error != nil {
println("error=\(error)")
return
}
let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
self.finalString = String(responseString!)
println("\(self.finalString)");
}
task.resume()
//print finalString
println("finalString = \(finalString)")
}
}
我正在尝试做两件事,我会告诉你什么不能同时使用。
首先,在这段代码中没有看到,我试图为UILabel.text 分配一个值,但这根本不起作用。我不能在函数内做,我也不能在外面做。这给我带来了第二个问题。当 finalString 在函数内部打印时,它会输出正确的值。
但是,当它在函数之外打印时,它会打印它最初分配的值。请告诉我如何正确分配 UILabel.text 值以及如何使用问题范围之外的输出。
提前致谢。
【问题讨论】:
-
您在异步任务完成之前打印它
-
您能详细说明一下吗?我认为任务在“task.resume()”之后完成。如果没有,那我该如何完成任务?
-
task.resume启动任务,但它立即返回,任务在后台运行。您需要使用闭包中检索到的数据执行您的操作。
标签: ios swift asynchronous request dispatch