方法中使用的协议静态变量
Protocol static var used in method
我有这个 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"
有没有办法简单地实现这个?
这就是您要查找的语法。您需要通过附加 .self
来传递类型本身。这是为了防止错误(因为直接谈论类型的情况很少见,但很容易发生意外)。并且您需要采用类型本身的参数而不是该类型的实例。
func doSomethingFrom(table: Table.Type) {
print(table.tableName)
}
doSomethingFrom(table: User.self) // prints "user"
由于 tableName 的值对于 User 的所有实例都是相同的(因为它是静态的),您可以这样做:
func doSomethingFrom(table: Table) {
print(User.tableName)
// OR:
print(type(of: table).tableName)
}
确保这是您真正想要的。
我有这个 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"
有没有办法简单地实现这个?
这就是您要查找的语法。您需要通过附加 .self
来传递类型本身。这是为了防止错误(因为直接谈论类型的情况很少见,但很容易发生意外)。并且您需要采用类型本身的参数而不是该类型的实例。
func doSomethingFrom(table: Table.Type) {
print(table.tableName)
}
doSomethingFrom(table: User.self) // prints "user"
由于 tableName 的值对于 User 的所有实例都是相同的(因为它是静态的),您可以这样做:
func doSomethingFrom(table: Table) {
print(User.tableName)
// OR:
print(type(of: table).tableName)
}
确保这是您真正想要的。