将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.
}
由于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
。
谢谢我明白了......最终下面的代码解决了它,但是从你所说的这里有一些冗余的代码。 – uberphoebe
几乎在那里......请参阅编辑主要quiestion解决方案。感谢您的帮助 – uberphoebe
只需更换*我想要将此值... *注释与代码更新文本字段,你就完成了。 – vadian
谢谢,这不起作用,这是我尝试的第一件事。 textField.text =“name = \(firstNameValue!)” 这会返回一个错误 – uberphoebe
它说我需要把自己。在前面像self.textField.text,但是当我这样做时,它不会生成编译错误,但没有值插入字段中。 – uberphoebe