我有一个可扩展的表,其中自定义单元格在点击可见行时显示或消失。单元格的数据存储在plist中,并声明为NSMutableArray。
我对下标'进行了模糊的使用。以下代码中的错误,并希望其他人遇到此并知道修复。 我已经尝试了所有可能的选择,我必须补充我的有限知识。
var cellDescriptors: NSMutableArray!
func getCellDescriptorForIndexPath(indexPath: NSIndexPath) -> [String: AnyObject] {
let indexOfVisibleRow = visibleRowsPerSection[indexPath.section][indexPath.row]
let cellDescriptor = cellDescriptors[indexPath.section][indexOfVisibleRow] as! [String: AnyObject]
return cellDescriptor
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indexOfTappedRow = visibleRowsPerSection[indexPath.section][indexPath.row]
if cellDescriptors[indexPath.section][indexOfTappedRow]["isExpanded"] as! Bool == true { // Ambiguous use of subscript error
var shouldExpandAndShowSubRows = false
if cellDescriptors[indexPath.section][indexOfTappedRow]["isExpanded"] as! Bool == false { // Ambiguous use of subscript error
// In this case the cell should expand.
shouldExpandAndShowSubRows = true
}
答案 0 :(得分:3)
func getCellDescriptorForIndexPath(indexPath: NSIndexPath) -> [String: AnyObject] {
let indexOfVisibleRow = visibleRowsPerSection[indexPath.section][indexPath.row]
// HERE IS WHAT YOU WANT:
let cellDescriptor = (cellDescriptors[indexPath.section] as! NSMutableArray)[indexOfVisibleRow] as! [String: AnyObject]
return cellDescriptor
}
答案 1 :(得分:1)
编译器告诉您它无法确定您实际订阅的对象类型是否可以下载。您还没有提供任何有关您所谓的"单元格描述符"的信息。因此很难确定问题是什么,但看起来您希望从indexOfTappedRow
的下标调用中查找字典。
这可能是由于使用了NSArray
/ NSMutableArray
和NSDictionary
/ NSMutableDictionary
等Cocoa集合,它们是AnyObject
的容器(丢失类型)关于它究竟存储的信息。由于这些是免费的桥接到Swift阵列和字典,因此很容易改变您的模型(包括容器)以使用特定类型,以便您的容器可以明确地声明他们已经'' ; CellDescriptor
"的数组(与NSArray
""一组随机类型的对象(AnyObject
)")。通过这种方式,你不必做一些令人讨厌的事情,例如通过一些容易出错的字符串来查找属性,你可能会在这里或那里输入错误(使用as!
会使这种情况变得更糟,这要求它是& #34;有效或爆炸"与"真或假")。
将Swift的强类型系统视为可以利用的东西,而不是尽可能避免的东西。事情真的变得容易多了。
评论更新
在这种情况下(因为PLIST是一个纯Cocoa对象图),您只需扩展代码即可一步一步地完成任务。那就是:
as? NSDictionary
的字典(提示:if let...
)"isExpanded"
密钥as? NSNumber
的价值(提示:if let...
)NSNumber
' s boolValue
。没有含糊之处。 答案 2 :(得分:0)
if cellDescriptors[indexPath.section][indexOfTappedRow]["isExpanded"] as! Bool == true {
var shouldExpandAndShowSubRows = false
if cellDescriptors[indexPath.section][indexOfTappedRow]["isExpanded"] as! Bool == false { // Ambiguous use of subscript error
// In this case the cell should expand.
shouldExpandAndShowSubRows = true
}
}
应替换为:
if **((cellDescriptors[indexPath.section] as! NSMutableArray)[indexOfTappedRow] as AnyObject)["isExpandable"] as! Bool** == true {
var shouldExpandAndShowSubRows = false
if ((cellDescriptors[indexPath.section] as! NSMutableArray)[indexOfTappedRow] as AnyObject)["isExpanded"] as! Bool == false {
// In this case the cell should expand.
shouldExpandAndShowSubRows = true
}
}