将IBAction的变量值传递给IBOutlet

问题描述:

好的,我对此很陌生,在开发过程中慢慢地工作。但是我意识到如果我能够解决这个问题,我会有很长的路要走。将IBAction的变量值传递给IBOutlet

我打电话给我的服务器上的PHP文件并返回JSON数据。这工作。我可以打印可变

print("firstNameValue: \(firstNameValue)") 

我现在想输出一个变量... firstNameValue的值到名为文本框的文本字段。

我对Swift很陌生,我在想“全局变量?”。这工作,但我想等待来自HTTP调用的响应来完成然后更新文本字段。

我希望你能帮上忙。我对OOP非常陌生,头脑破裂。

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var feel: UITextField! 

    @IBAction func anxious(sender: AnyObject) { 



     let myUrl = NSURL(string: "http://mywebsite.com/Jamesbond.php"); 

     let request = NSMutableURLRequest(URL:myUrl!); 

     request.HTTPMethod = "POST";// Compose a query string 

     let postString = "firstName=James&lastName=Bond"; 

     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
      data, response, error in 

      if error != nil 
      { 
       print("error=\(error)") 
       return 
      } 

      // You can print out response object 
      print("response = \(response)") 

      // Print out response body 
      let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("responseString = \(responseString)") 

      //Let's convert response sent from a server side script to a NSDictionary object: 
      do { 
       let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

       if let parseJSON = myJSON { 

        // Now we can access value of First Name by its key 
        let firstNameValue = parseJSON["firstName"] as? String 

        print("firstNameValue: \(firstNameValue)") 

        EDIT::the below two lines solved it. 
        dispatch_async(dispatch_get_main_queue()) { 
        self.textField.text = firstNameValue} 


       } 
      } catch { 
       print(error) 
      } 
     } 
     task.resume() 

    } 
    @IBOutlet weak var textField: UITextField! 




    @IBAction func submit(sender: AnyObject) { 
     print("hello") 
     let a = 9 
     let b = 10 
     let c = (a*b) 
     textField.text="You are a banana \(c)" 

    } 




    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. 
    } 
+2

只需更换*我想要将此值... *注释与代码更新文本字段,你就完成了。 – vadian

+0

谢谢,这不起作用,这是我尝试的第一件事。 textField.text =“name = \(firstNameValue!)” 这会返回一个错误 – uberphoebe

+0

它说我需要把自己。在前面像self.textField.text,但是当我这样做时,它不会生成编译错误,但没有值插入字段中。 – uberphoebe

由于dataTaskWithRequest异步工作,文本字段必须在完成处理程序中更新。

此代码执行所有必要的可选绑定检查并运行该行以更新主线程上的文本字段。

...  
do { 
    if let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject], 
     firstNameValue = parseJSON["firstName"] as? String { 
     print("firstNameValue: \(firstNameValue)") 

     dispatch_async(dispatch_get_main_queue()) { 
      self.textField.text = firstNameValue 
     } 
    } 
} 
catch { 
    print(error) 
} 

在这种情况下根本不需要选项.MutableContainers

+0

谢谢我明白了......最终下面的代码解决了它,但是从你所说的这里有一些冗余的代码。 – uberphoebe

+0

几乎在那里......请参阅编辑主要quiestion解决方案。感谢您的帮助 – uberphoebe