方法中使用的协议静态var

时间:2016-09-28 20:10:50

标签: swift methods static protocols swift-protocols

我有 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"

有没有办法简单地实现这个目标?

2 个答案:

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

确保这是你真正想要的。