我希望php中的变量在swift中结束(或获取变量的值)。我该怎么做?
$name = "William";
如何将这个字符串"William"添加到我的 Swift 脚本中?谁能帮我?
我知道这是JSON和POST或其他东西,但除此之外我完全迷失了。
当您想将数据从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()
我以iOS/PHP开发人员而不是Swift程序员的身份回答这个问题。
您需要向托管 PHP 脚本的 Web 服务器发送 HTTP 请求,该服务器将返回给定任何指定参数的网页内容。
例如,如果您向以下 PHP 脚本发送了GET
HTTP 请求,则响应将以 NSData
或 NSString
的形式为"William",具体取决于您使用的方法。
<?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。