ios - 如何使用 Swift 3 在泛型函数中获取计算变量的子类版本?

标签 ios swift uitableview generics

我试图在 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/

相关文章:

ios - UITableViewCell中图片的宽度随点击变化

ios - 向 Core Data 托管对象添加 `lastModified` 记录

ios - 子框架的 WKWebView

ios - Xcode 11.4 - 终端介绍

swift - IQKeyboardManager 中的构建错误

arrays - 在二维数组 NxN Swift 上创建、随机填充和搜索元素

ios - 快速异步加载tableView图像

ios - UIViewController 中的 UITableView

ios - 无法从 CoreData 中删除 NSOrderedSet

ios - 来自调试器 : Terminated due to memory issue in device only 的消息