gpt4 book ai didi

swift - 将 Swift 类型存储在变量中

转载 作者:行者123 更新时间:2023-11-30 10:06:44 25 4
gpt4 key购买 nike

我有一个 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 build设置 View ,并且在请求单元格时,我可以查询模型以获取标识符和单元格键入。但我不知道使用什么关键字来代替 Type。我尝试过 TypeAnyClassUITableViewCell.Type,当我尝试实例化模型类时,它们都会引起类型分配错误。

最佳答案

您想要的语法是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 } )

关于swift - 将 Swift 类型存储在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com