将Swift连接到PHP代码

时间:2014-10-21 15:46:41

标签: 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 个答案:

答案 0 :(得分:0)

有几点想法:

  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(...)或类似的东西。


  3. BTW,在上面的两个例子中,我在解析JSON时使用了as NSDictionary。如果您正在生成JSON数组,请将其更改为as NSArray

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