php - 将 Swift 连接到 PHP 代码

标签 php json swift

我正在尝试在我的网站上用 php 编写一个简单的字符串:

json_encode("str"); echo json_encode("str");

在 Swift 中,我将如何检索该字符串。我目前有一个报告 HTTPBody 的函数。

func buttonAction(sender:UIButton!)
{
    var request = NSMutableURLRequest(URL: NSURL(string: myUrlWhereThePHPCodeWasWritten), cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 5)
    var response: NSURLResponse?
    var error: NSError?


    let jsonString = ""
    request.HTTPBody = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
    request.HTTPMethod = "GET"



    NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error)


    if let httpResponse = response as? NSHTTPURLResponse {
        println("HTTP response: \(response)")
    } else {
        println("No HTTP response")
    }
}

我如何让它打印出“str”本身。我是菜鸟,基本上是在尝试创建此过程的 hello world 版本。

最佳答案

几个想法:

  1. 如果您要使用sendSynchronousRequest,您应该将NSData 作为返回值:

    if let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &error) {
        // if JSON
    
        var parseError: NSError?
        if let responseObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as? NSDictionary {
            println("string = \(responseObject)")
        } else {
            println("parseError = \(parseError)")
        }
    
        // if simple string
        //
        // let string = NSString(data: data, encoding: NSUTF8StringEncoding)
        // println("string = \(string)")
    } else {
        println("error = \(error)")
    }
    
    if let httpResponse = response as? NSHTTPURLResponse {
        println("HTTP response: \(response)")
    } else {
        println("No HTTP response")
    }
    
  2. 但我建议不要使用 sendSynchronousRequest。或者,至少不要从主线程调用它。使用异步方法,如:

    NSURLConnection.sendAsynchronousRequest(request, queue: nil) {
        response, data, error in
    
        if let httpResponse = response as? NSHTTPURLResponse {
            println("HTTP response: \(response)")
        } else {
            println("No HTTP response")
        }
    
        if data != nil {
            // if JSON
    
            var parseError: NSError?
            if let responseObject = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &parseError) as? NSDictionary {
                println("string = \(responseObject)")
            } else {
                println("parseError = \(parseError)")
            }
    
            // if simple string
            //
            // let string = NSString(data: data, encoding: NSUTF8StringEncoding)
            // println("string = \(string)")
        } else {
            println("error = \(error)")
        }
    }
    

    或者使用 NSURLSession.sharedSession().dataTaskWithURL(...) 或类似的东西。


顺便说一句,在上面的两个例子中,我在解析 JSON 时都使用了 as NSDictionary。如果您要生成 JSON 数组,请将其更改为 as NSArray

注意:我从 PHP json_encode 推断出您想要生成有效的 JSON 响应。但是你不能只是 json_encode 一个字符串。通常,您会使用 json_encode(["key"=> "string"]) 生成字典或使用 json_encode(["string"]) 生成数组。

关于php - 将 Swift 连接到 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490837/

相关文章:

python - Pandas Dataframe 中的嵌套嵌套列

ios - 如何隐藏或删除ui组件并移动其他组件以占据隐藏或删除的空间?

ios - 使用应用程序测试数据库的下载速度和最大下载速度

php - 使用 mySQL 查询从登录用户中选择数据

java - 为 Java 中的 WCF 服务生成代理和 PHP 重复消息错误

json - 如何在 JMeter 中提取完整的 JSON 响应数据?

ios - 在 Collection View 的容器 View 中呈现 View Controller didSelectItemAtIndexPath swift

PHP/MySQL 毫秒到小时 :Minutes:Seconds

javascript - 带有 Highcharts 的全屏面板 Bootstrap (响应式)

java - 如何使用 Jackson ObjectMapper 解析 java 对象的 json 响应