如何将PHP变量转换为swift

时间:2015-01-03 00:58:49

标签: php json swift

我希望php中的变量能够在swift中克服(或者获取变量的值)。我怎么能这样做?

$name = "William";

如何将此字符串“William”添加到我的Swift脚本中?任何人都可以帮助我吗?

我知道这是JSON和POST之类的东西,但除此之外我完全迷失了。

2 个答案:

答案 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;以NSDataNSString的形式,具体取决于您使用的方法。

<?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