我将字典显示为UITableView。我在Objective-c中很容易做到这一点。但现在很快,我无法从字典数组中获取值。当我尝试在tableView:cellForRowAtIndexPath
预编译器中获取值时抛出错误
无法转换类型" AnyObject的值?!"指定类型'数组'
或类似下面的例子
无法转换类型" AnyObject的值?!"使用类型' int'
的idnex
var cellArray = []
override func viewDidLoad() {
cellArray = [
[
"section" : "Melody",
"rows" :
[
[
"title" : "Wi-Fi / Pairing",
"icon" : "",
"action" : "actionConnectSpeaker"
],
[
"title" : "Sound",
"icon" : "",
"action" : "actionConnectSpeaker"
]
]
],
[
"section" : "Music",
"rows" :
[
[
"title" : "Add a new account",
"icon" : "",
"action" : "actionAddAccount"
]
]
]
]
}
...
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.Value2, reuseIdentifier: nil)
cell.textLabel?.text = cellArray[indexPath.section]["rows"][indexPath.row]["title"]
return cell
}
我总结说我们不能这样做......我找到了任何一个例子。我可能不太了解Swift中的类型......
答案 0 :(得分:2)
在Swift中,如果要调用AnyObject
或objectAtIndex:
这样的函数,你必须调用objectForKey:
类型的内容。
let section = cellArray[indexPath.section]
let rows = section["rows"] as! [[String:String]]
cell.textLabel?.text = rows[indexPath.row]["title"]
答案 1 :(得分:0)
如果您确定没有nil
值,只需执行此操作:
cell.textLabel?.text = cellArray[indexPath.section]["rows"]![indexPath.row]["title"]
答案 2 :(得分:0)
如果你想安全地做(如果任何对象可以是零或其他类型,你应该使用if let
:
if let dict = cellArray[indexPath.section] as? [String : AnyObject],
rows = dict["rows"] as? [AnyObject],
result = rows[indexPath.row] as? [String : AnyObject],
title = result["title"] {
cell.textLabel?.text = title
}
答案 3 :(得分:0)
您通常应该避免在Swift中使用不同类型的元素的集合。您的部分数据是字典,"部分"的值key是一个字符串,而" rows"的值是key是一个数组。尝试用元组替换这个字典。
function _GetHospitalData(){
$data = $this->input->post('search');
$column = $this->input->post('column');
//var_dump($this->input->post());die();
$this->db->select('name,code');
$this->db->from('facility_info');
$this->db->like("LOWER($column)", strtolower($data));
$query = $this->db->get();
$hospital_array = array();
foreach ($query->result() as $row) {
$hospital_array[] = $row->$column;
}
//return $hospital_array;
return $query->result_array();
}
通过这种方式,Swift的类型系统可以帮助您确保使用正确的类型,不需要强制向下转换。