我试图在 UITableViewCell 扩展上定义一个标识符(类名)静态计算变量,并通过将子类发送到通用函数来访问该标识符。
当访问 Subclass.identifier 时,我得到子类的名称,但是当从通用函数访问它时,它返回 UITableViewCell
代码:
protocol Identifiable {
static var identifier: String { get }
}
extension Identifiable {
static var identifier: String { return String(describing: Self.self) }
}
extension UITableViewCell: Identifiable { }
class Subclass: UITableViewCell {
}
print("\(Subclass.identifier)") // Output: "Subclass"
func blah<T: Identifiable>(_ cellType: T.Type) {
print("\(cellType.identifier)")
}
blah(Subclass.self) // Output: "UITableViewCell"
如何在通用函数中获取子类标识符,而不必遵守所有 UITableView 子类上的可识别协议(protocol)?
最佳答案
你有一个不必要的 self
。你想要:
extension Identifiable {
static var identifier: String { return String(describing: self) }
}
当你说Self.self
时,你是在说“这个类的自身”,而“这个类”是你扩展的东西(UITableViewCell)。当你只说 self
时,你说的是“这个东西”,其中“这个东西”是正在执行该函数的东西,所以 Subclass
关于ios - 如何使用 Swift 3 在泛型函数中获取计算变量的子类版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823317/