方法中使用的协议静态变量

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) 
}

确保这是您真正想要的。