gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 01:23:06 25 4
gpt4 key购买 nike

我正在尝试在 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 时,您说的是“this thing”,其中“this thing”是执行函数的东西,所以 Subclass

关于ios - 如何使用 Swift 3 在泛型函数中获取计算变量的子类版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42823317/

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