我有 swift 代码:
protocol Table {
static var tableName: String { get }
}
class User: Table {
internal static var tableName = "user"
}
我知道想用Table
协议参数构造方法。
类似的东西:
func doSomethingFrom(table: Table) {
print(table.tableName)
}
doSomethingFrom(table: User) // prints "user"
有没有办法简单地实现这个目标?
答案 0 :(得分:2)
这是您正在寻找的语法。您需要通过附加.self
来传递类型。这是为了防止错误(因为直接谈论类型是很少见的,但很容易偶然发生)。您需要获取类型本身的参数,而不是该类型的实例。
func doSomethingFrom(table: Table.Type) {
print(table.tableName)
}
doSomethingFrom(table: User.self) // prints "user"
答案 1 :(得分:0)
由于tableName的值对于User的所有实例都是相同的(因为它是静态的),您可以这样做:
func doSomethingFrom(table: Table) {
print(User.tableName)
// OR:
print(type(of: table).tableName)
}
确保这是你真正想要的。