我希望php中的变量能够在swift中克服(或者获取变量的值)。我怎么能这样做?
$name = "William";
如何将此字符串“William”添加到我的Swift脚本中?任何人都可以帮助我吗?
我知道这是JSON和POST之类的东西,但除此之外我完全迷失了。
答案 0 :(得分:5)
如果您想从PHP获取数据到iOS设备,我建议让PHP代码将其作为JSON发送。 JSON更易于客户端应用程序解析(特别是当您的Web服务响应变得更复杂时),并且可以更容易区分有效响应和某些通用服务器错误。)
要从PHP发送JSON,我通常会创建一个“关联数组”(例如,下面的$results
变量),然后调用json_encode
:
<?php
$name = "William";
$results = Array("name" => $name);
header("Content-Type: application/json");
echo json_encode($results);
?>
此(a)指定Content-Type
标头,指定响应将为application/json
; (b)然后编码$results
。
传送到设备的JSON如下所示:
{"name":"William"}
然后你可以编写Swift代码来调用NSJSONSerialization
来解析该响应。例如,在Swift 3中:
let url = URL(string: "http://example.com/test.php")!
let request = URLRequest(url: url)
// modify the request as necessary, if necessary
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print("request failed \(error)")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], let name = json["name"] {
print("name = \(name)") // if everything is good, you'll see "William"
}
} catch let parseError {
print("parsing error: \(parseError)")
let responseString = String(data: data, encoding: .utf8)
print("raw response: \(responseString)")
}
}
task.resume()
或者在Swift 2中:
let url = NSURL(string: "http://example.com/test.php")!
let request = NSMutableURLRequest(URL: url)
// modify the request as necessary, if necessary
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard let data = data else {
print("request failed \(error)")
return
}
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: String], let name = json["name"] {
print("name = \(name)") // if everything is good, you'll see "William"
}
} catch let parseError {
print("parsing error: \(parseError)")
let responseString = String(data: data, encoding: NSUTF8StringEncoding)
print("raw response: \(responseString)")
}
}
task.resume()
答案 1 :(得分:3)
我作为iOS / PHP开发人员而不是Swift程序员回答这个问题。
您需要向托管PHP脚本的Web服务器发送HTTP请求,该脚本将返回给定任何指定参数的网页内容。
例如,如果您向以下PHP脚本发送了GET
HTTP请求,则响应将是&#34; William&#34;以NSData
或NSString
的形式,具体取决于您使用的方法。
<?php
$name = "William";
echo $name;
?>
使用参数GET http://myserver.com/some_script.php?name=William
:
<?php
$name = $_GET['name']; // takes the ?name=William parameter from the URL
echo $name; // William
?>
至于Swift方面,这里有一个非常有效的答案,它表示发送请求的无数方法之一:https://stackoverflow.com/a/24016254/556479。