2016-09-30 30 views
0

我可以從Web服務器讀取文本並將其打印到Xcode uilabel,但我不知道如何解析返回陣列。我試圖從服務器獲取A和B,添加它們,並打印使用到的UILabel斯威夫特3.PHP,Xcode 8,Swift 3 - 如何將數組從Web服務器返回到Xcode模擬器

這是PHP和Xcode的8:

連接,add.php

<?php 
$a=3; 
$b=5; 
$data=array($a,$b); 
echo json_encode($data); 
?> 

的Xcode 8

import UIKit 
import Foundation 

class ViewController: UIViewController { 

var a=0 
var b=0 
var c=0 


@IBOutlet weak var result: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a 
nib. 
} 

@IBAction func getVars(_ sender: AnyObject) { 

    // set label during request 

    self.result.text="WAITING" 

    // send request to connect-add.php and retrieve a and b 

    let myUrl = NSURL(string: "http://www.example.com/connect-add.php") 

    var request = URLRequest(url:URL(string: 
"http://www.example.com/connect-add.php")!) 

    request.httpMethod = "POST" 

    let postString = "" 

    request.httpBody = postString.data(using: .utf8); 

    let task = URLSession.shared.dataTask(with: request) { 
     data, response, error in 

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

     // receive response to connect-add and parse to a and b 

     var response = String(data: data!, encoding: .utf8) 

     var a=response[0] 
     var b=response[1] 

     // add a and b and display 

     var c=a+b 
     self.result.text=c 
    } 
    task.resume() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 

的Xcode給我用於設定一個變種=響應的誤差[0]和用於設置無功b =反應[1]。有任何想法嗎?

我編輯了PHP和Xcode來添加JSON序列化解析。 Xcode顯示一個錯誤 - 使用未解析的標識符「JSON」。這是代碼。

PHP

<?php 
$a=3; 
$b=5; 
$data="a1=".$a.", b1=".$b; 
echo json_encode($data); 
?> 

的Xcode 8

import UIKit 
import Foundation 

class ViewController: UIViewController { 

var a=0 
var b=0 
var c=0 


@IBOutlet weak var result: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a 
nib. 
} 

@IBAction func getVars(_ sender: AnyObject) { 

    // set label during request 

    self.result.text="WAITING" 

    // send request to connect-add.php and retrieve a and b 

    let myUrl = NSURL(string: "http://www.example.com/connect-add.php") 

    var request = URLRequest(url:URL(string: 
"http://www.example.com/connect-add.php")!) 

    request.httpMethod = "POST" 

    let postString = "" 

    request.httpBody = postString.data(using: .utf8); 

    let task = URLSession.shared.dataTask(with: request) { 
     data, response, error in 

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

     // receive response to connect and parse to a and b 

     var response = String(data: data!, encoding: .utf8) 

     var obj=JSON.parse(response) 

     var a=obj.a1 
     var b=obj.b1 

     // add a and b and display 

     var c=a+b 
     self.result.text=c 
    } 
    task.resume() 

} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 
+0

你需要看看像'讓JSON =試試? JSONSerialization.jsonObject(with:data)' – cmorrissey

+0

@cmorrissey我加了JSON.parse。它仍然給出一個錯誤 - 使用未解析的標識符「JSON」。 – Aleric

回答

0
if var json = try JSONSerialization.jsonObject(with: data) as? [String: 
String], var a2 = json["a"], var b2 = json["b"] { 
// It's working 

}