json — Подключение Swift к PHP-коду

Я пытаюсь закодировать простую строку на моем сайте, написанную на 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» ​​сам. Я новичок и в основном пытаюсь создать привет версию мира этого процесса.

1

Решение

Пара мыслей:

  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(...) или что-то типа того.


Кстати, в обоих приведенных выше примерах я использовал as NSDictionary при разборе JSON. Если вы генерируете массив JSON, измените его на as NSArray,

Примечание: я сделал вывод из PHP json_encode что вы хотите сгенерировать правильный ответ JSON. Но вы не можете просто json_encode строка. Как правило, вы бы json_encode(["key" => "string"]) создать словарь или json_encode(["string"]) генерировать массив.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]