Я пытаюсь закодировать простую строку на моем сайте, написанную на 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» сам. Я новичок и в основном пытаюсь создать привет версию мира этого процесса.
Пара мыслей:
Если вы собираетесь использовать 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")
}
Но я бы посоветовал против 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"])
генерировать массив.
Других решений пока нет …