您需要在主线程上执行UI更新
NSURLSession完成处理程序将始终在后台线程上调用。要更新您的UI,一个简单
dispatch_async的主线程就足够了:)
@IBAction func buttonPressed(sender: AnyObject) { var urlString = "http://www.weather-forecast.com/locations/" + cityName.text.stringByReplacingOccurrencesOfString(" ", withString: "") + "/forecasts/latest" var url = NSURL(string: urlString) let task = NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in var urlContent = NSString(data: data, encoding: NSUTF8StringEncoding) as String var contentArray = urlContent.componentsSeparatedByString("<span class="phrase">") var weatherInfo = contentArray[1].componentsSeparatedByString("</span>") dispatch_async(dispatch_get_main_queue(), { //perform all UI stuff here self.resultShow.text = weatherInfo[0] }) } task.resume()}编辑
尽管由于不保留闭包而在这里并不重要,但在某些情况下,显式声明捕获列表以避免保留周期很重要。



