我怎样才能让一个 PHP 变量变成 swift


How can I get a PHP variable over to swift

我希望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 请求,则响应将以 NSDataNSString 的形式为"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。