我正在尝试从mysql数据库获取信息,我有以下代码。我曾尝试使用其他页面上的编辑,但我是编程新手,无法弄清楚我做错了什么。
func get(){
let url = URL(string: "http://192.168.157.134/Getdepartment.php")
let data = try? Data(contentsOf: url!)
values = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSArray
tableView.reloadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return values.count;
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! SpecialCell
let maindata = values[indexPath.row]
cell.username.text = maindata["Username"] as? String
cell.password.text = maindata["Password"] as? String
cell.num.text = maindata["FavoriteNumber"] as? String
cell.info.text = maindata["Info"] as? String
return cell;
}
答案 0 :(得分:1)
如前所述,Foundation NSArray
通常不提供类型信息,因此它根本无法帮助Swift编译器。
在Swift 3中,编译器必须知道所有下标对象的类型,否则会出错。
要解决此问题,首先要将您的数据源数组声明为包含Swift Array
的Swift Dictionary
。这使编译器 - 最终你 - 很高兴。
var values = [[String:Any]]()
如果所有字典值都是字符串,您甚至可以将values
声明为[[String:String]]
其次将反序列化行转换为相同的类型:
values = try! JSONSerialization.jsonObject(with: data!, options: []) as! [[String:Any]]
PS:mutableContainers
在Swift中没用,传递空options
旁注:
即使在本地网络中,也不要通过Data(contentsOf: