我正在尝试在我的网站上用 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 版本。
最佳答案
几个想法:
如果您要使用
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(...)
或类似的东西。
顺便说一句,在上面的两个例子中,我在解析 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/