我正在为swift编写一个简单的iOS应用程序,它向我的服务器发出ajax调用。下面是相关SWIFT代码:Swift不从PHP服务器解析JSON
class Request : NSObject {
func send(url: String, f: (NSData)->()) {
var request = NSURLRequest(URL: NSURL(string: url)!)
var response: NSURLResponse?
var error: NSErrorPointer = nil
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: error)
//var reply = NSString(data: data!, encoding: NSUTF8StringEncoding)
f(data!)
}
}
class myObj: NSObject {
let baseURL: String
var message: String
init() {
self.baseURL = XXXXXXXXXXXXX
self.message = "No Message"
}
func check() -> Bool {
let locationURL = self.baseURL
self.message = locationURL
var request = Request()
request.send(locationURL, f: {(result: NSData)->() in
let jsonData: NSData = result
var error: NSError?
let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as! NSDictionary
self.message = jsonDict["title"] as! String
})
return true
}
}
这里是服务器端的代码,我返回假JSON有:
<?php
header('Content-Type: application/json; charset=utf-8');
if(isset($_GET['location'])) {
echo json_encode(Array('success' => true, 'message' => 'I came from the server.', 'title' => 'tittttt'));
} else if(isset($_POST['message'])) {
echo json_encode(Array('success' => true, 'message' => 'message received', 'title' => 'ttt'));
} else {
echo json_encode(Array('success' => false, 'message' => 'invalid params', 'title' => 'title from server'));
}
?>
当我转出我的网址为虚拟JSON URL(我使用http://jsonplaceholder.typicode.com/posts/1?a=b ) 有用;当我使用我自己的URL时,它会失败,并显示以下错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
我在做什么错在这里?
编辑:这里是来自服务器的实际JSON响应:
{ success: true, message: "I came from the server.", title: "tit-le" }
在哪一行没有错误发生? – jtbandes
就行了:'let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData,options:nil,error:&error)as! NSDictionary' –
你的php似乎正在返回一个数组,你的swift似乎迫使它成为一本字典 – Wain