Ios 如何通过实例调用类的静态函数

Ios 如何通过实例调用类的静态函数,ios,swift,cocoa-touch,Ios,Swift,Cocoa Touch,我有一个简单的课程: class TableItem { class func cellIden() -> String { return "TableItem" } } 以及TableItem class EditableItem { override class func cellIden() -> String { return "EditableItem" } } 然后,在我的代码的某个地方,我有: var items: [TableIte

我有一个简单的课程:

class TableItem {
  class func cellIden() -> String {
    return "TableItem"
  }
}
以及
TableItem

class EditableItem {
  override class func cellIden() -> String {
    return "EditableItem"
  }
}
然后,在我的代码的某个地方,我有:

var items: [TableItem] = [TableItem(), EditableItem()]
现在,我要做的是,遍历项并调用每个
TableItem
的静态
cellIden()
函数

for i in items {
  var iden = i.self.cellIden()
}
但是,它告诉我,
TableItem没有名为“cellIden”的成员。

如何从类的实例调用其静态方法


注意:我无法调用
TableItem.cellIden()
,因为
I
可以是
TableItem
EditableItem
您需要获取
I
的运行时类型。每个实例都有一个返回其运行时(动态)类型的
dynamicType
属性:

class EditableItem {
  override class func cellIden() -> String {
    return "EditableItem"
  }
}

它记录在。

中,因为您希望查询实例而不是类,所以可以提供实例方法(该方法将返回类的方法)。您只需要在基类中执行,这会对用户隐藏实现

class TableItem {
   class func cellIden() -> String {
       return "TableItem"
   }

   func iCellIden() -> String {
       return self.dynamicType.cellIden()
   }
}

class EditableItem: TableItem {
   override class func cellIden() -> String {            
       return "EditableItem"
   }
}

var items: [TableItem] = [TableItem(), EditableItem()]

for i in items {
    println("\(i.dynamicType.cellIden())") // Works, fine
    println("\(i.iCellIden())") // Equivalent, but removes responsibility from calle
}

几乎是重复的(关于类型属性而不是类型方法)。但这不是我想要做的。我想要一个静态函数,因为cellIden独立于任何实例,需要在单元格实例化之前调用它。它调用class函数,该函数将返回类/子类的正确字符串。它只是对调用者隐藏了实现。也许,但不是正确的方法。谢谢你。