ไม่สามารถใช้ตัวแปรนอกวิธีขอบเขตใน Swift (dataTaskWithRequest)

@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 อย่างถูกต้อง และวิธีใช้เอาต์พุตนอกขอบเขตของคำถาม ขอบคุณล่วงหน้า.


person AngleSideSide    schedule 08.01.2015    source แหล่งที่มา
comment
คุณกำลังพิมพ์ก่อนที่งานอะซิงโครนัสจะเสร็จสิ้น   -  person Leo Dabus    schedule 08.01.2015
comment
คุณช่วยอธิบายรายละเอียดเกี่ยวกับเรื่องนั้นหน่อยได้ไหม? ฉันคิดว่างานเสร็จสิ้นหลังจาก 'task.resume()' ถ้าไม่เช่นนั้นฉันจะทำงานให้เสร็จได้อย่างไร?   -  person AngleSideSide    schedule 08.01.2015
comment
stackoverflow.com/a/27650412/2303865 ลองดูโค้ดนี้   -  person Leo Dabus    schedule 08.01.2015
comment
task.resume เริ่มงานแต่จะกลับมาทันทีโดยที่งานกำลังทำงานอยู่เบื้องหลัง คุณต้องดำเนินการกับข้อมูลที่ดึงมาในการปิด   -  person Paulw11    schedule 08.01.2015