0
我從json異步獲取數據,並且想要更改UILabel文本,但文本沒有可以。 我覺得這不起作用,因爲功能changeLabel(...)內 FUNC getJsonArray(...),但爲什麼和怎麼辦這是正確的函數類型作爲參數類型,如何更改此函數中的UI元素值?
class DetailViewController: UIViewController {
@IBOutlet weak var detailDescriptionLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//load data from website, and run function changeLabel for change text on UI
getJsonArray("www.domen.com/app.php?action=get_data", doItFunc: changeLabel)
}
功能改變的UILabel運行文字
func changeLabel(jsonArray: NSArray){
//self.detailDescriptionLabel.text = "workplease"
self.detailDescriptionLabel.text = jsonArray[0]["newText"] as! String
println(self.detailDescriptionLabel.text)
//print in console new Data, but UILabel text in simulator(and phone) not change
}
函數來獲得淨並運行用戶功能異步數據
func getJsonArray(uri: String, doItFunc: (NSArray)->Void){
if let url = NSURL(string: uri) {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url, completionHandler: { (data, response, error) -> Void in
if error != nil {
println("error: \(error.localizedDescription): \(error.userInfo)")
}else if data != nil {
if let sJson = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as? Dictionary<String, AnyObject> {
let results: NSArray = sJson[jsonKey] as! NSArray
如果數據獲取,運行用戶功能doItFunc(結果)
doItFunc(results)
}else{
if let str = NSString(data: data, encoding: NSUTF8StringEncoding) {
println("Received data:\n\(str)")
}else {
println("unable to convert data to text")
}
}
}
})
task.resume()
}
else {
println("Unable to create NSURL")
}
}
}
謝謝!這行得通!!! – Gleb