我有UITableViewCell
的数据模型,如下所示:
class SettingsContentRow {
var title: String
var cellType: Type // How do i do this?
var action:((sender: UITableViewCell.Type) -> ())?
var identifier: String {
get { return NSStringFromClass(cellType) }
}
init(title: String, cellType: Type) {
self.title = title
self.cellType= cellType
}
}
我们的想法是将它们放在一个数组中以便于使用UITableViewController
构建设置视图,并且在请求单元格时,我可以只查询标识符和单元格Type
的模型。但我无法弄清楚要使用哪个关键字而不是Type
。我尝试过Type
,AnyClass
,UITableViewCell.Type
,当我尝试实例化模型类时,它们都会引起类型分配错误。
答案 0 :(得分:1)
您想要的语法是UITableViewCell.Type
。这是UITableViewCell
的子类的类型。您可以使用AnyClass
接受任何类的类型,但通常应该避免这种情况。大多数情况下,如果您认为自己需要AnyClass
,那么您真的需要通用。
当您尝试将类型传递给此init时,它将类似于:
SettingsContentRow("title", cellType: MyCell.self)
直接引用类型有点不常见,因此Swift要求您明确添加.self
。
无论如何,你可能实际上想要一个通用的。我可能会这样写:
final class SettingsContentRow<Cell: UITableViewCell> {
typealias Action = (Cell) -> ()
let title: String
let action: Action?
var identifier: String {
get { return NSStringFromClass(Cell.self) }
}
init(title: String, action: Action?) {
self.title = title
self.action = action
}
}
class MyCell: UITableViewCell {}
let row = SettingsContentRow(title: "Title", action: { (sender: MyCell) in } )