我正在爲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