如何让JSON在Swift 3中填充UITableView?

我无法获取数据显示。 我已经从MCViewController自定义类发布我的代码。 它不会build立。 但是,我确实在控制台中获得数据响应。 有人能指出我做错了什么吗?

class MCViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { let message_url = "https://www.testing.com/api/resources/get_film_message/film_id/3825" let send_url = "https://www.testing.com/api/resources/send_film_message" let film_id = "3825" var messageArray = [String]() weak var messageView : UITableView! func messageView(_ messageView: UITableView, numberOfRowsInSection section: Int) -> Int { return messageArray.count } func messageView(_ messageView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = messageView.dequeueReusableCell(withIdentifier: "msgContent", for:indexPath) as! MessageTableViewCell // Configuring Cell cell.msgContent.text = messageArray[indexPath.row] // Returning the cell return cell } @IBOutlet weak var MessageInput: UITextField! @IBAction func Sendmsg(_ sender: Any) { Sendmsg(username:MessageInput.text!, password: film_id) } override func viewDidLoad() { super.viewDidLoad() messageView.dataSource = self messageView.delegate = self // Do any additional setup after loading the view. //let post_data: NSDictionary = NSMutableDictionary() // post_data.setValue(username, forKey: "username") // post_data.setValue(password, forKey: "password") let url:URL = URL(string: message_url)! let session = URLSession.shared let request = NSMutableURLRequest(url: url) request.httpMethod = "GET" request.setValue("740c94c51891c02b64d6c78840b478fe0b02fe2c", forHTTPHeaderField: "X-API-KEY") request.setValue("Basic YmhlZW0uZW5nckBnbWFpbC5jb206YmgzM20=", forHTTPHeaderField: "Authorization") request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData // Do any additional setup after loading the view. var paramString = "" // for (key, value) in post_data // { // paramString = paramString + (key as! String) + "=" + (value as! String) + "&" // } // request.httpBody = paramString.data(using: String.Encoding.utf8) let task = session.dataTask(with: request as URLRequest, completionHandler: { ( data, response, error) in guard let _:Data = data, let _:URLResponse = response , error == nil else { return } let json: Any? do { json = try JSONSerialization.jsonObject(with: data!, options: []) if let parsedData = json as? [[String:Any]] { for dict in parsedData { if let title = dict["message"] as? String { self.messageArray.append(title) print(json) } } } } catch { return } guard let server_response = json as? NSDictionary else { return } if let data_block = server_response["data"] as? NSDictionary { if let session_data = data_block["session"] as? String { // self.login_session = session_data let preferences = UserDefaults.standard preferences.set(session_data, forKey: "session") // DispatchQueue.main.async(execute: self.LoginDone) } } }) task.resume() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func Sendmsg(username:String, password:String) { let post_data: NSDictionary = NSMutableDictionary() post_data.setValue(username, forKey: "message") post_data.setValue(password, forKey: "film_id") let url:URL = URL(string: send_url)! let session = URLSession.shared let request = NSMutableURLRequest(url: url) request.httpMethod = "POST" request.setValue("740c94c51891c02b64d6c78840b478fe0b02fe2c", forHTTPHeaderField: "X-API-KEY") request.setValue("Basic YmhlZW0uZW5nckBnbWFpbC5jb206YmgzM20=", forHTTPHeaderField: "Authorization") request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData var paramString = "" for (key, value) in post_data { paramString = paramString + (key as! String) + "=" + (value as! String) + "&" } request.httpBody = paramString.data(using: String.Encoding.utf8) let task = session.dataTask(with: request as URLRequest, completionHandler: { ( data, response, error) in guard let _:Data = data, let _:URLResponse = response , error == nil else { return } let json: Any? do { json = try JSONSerialization.jsonObject(with: data!, options: []) print(json) } catch { return } guard let server_response = json as? NSDictionary else { return } // if let data_block = server_response["data"] as? NSDictionary // { // if let session_data = data_block["session"] as? String // { // self.login_session = session_data // // let preferences = UserDefaults.standard // preferences.set(session_data, forKey: "session") // // DispatchQueue.main.async(execute: self.LoginDone) // } // } // }) task.resume() } 

viewDidLoad() ,添加到messageArray的do {} catch {},调用messageView.reloadData messageView.reloadData()如下所示:

 do { json = try JSONSerialization.jsonObject(with: data!, options: []) if let parsedData = json as? [[String:Any]] { for dict in parsedData { if let title = dict["message"] as? String { self.messageArray.append(title) print(json) } } } messageView.reloadData() // this is your tableView reload } catch { return } 

通常人们会将它们的UITableView对象作为tableView来调用,以便更容易在代码中find。 虽然没有人禁止你使用messageView作为你的tableView的名字。