我saw this question,但我想要的是创建一个实际类的数组,以便我可以在每个类上调用一个类函数。
示例:
let syncClasses:[Any] = [Battery, Tank, Gas]
for object in syncClasses {
object.someClassMethod()
}
我尝试使用[Any]
作为数组的类型但是扔了:
Expected member name or constructor call after type name
所有类都继承自同一个Object
类,所以我可以通过以下方式来破解它:
let syncClasses:[Object] = [Battery(), Tank()]
但是我必须创建我想要调用方法而不是类函数的函数,而不是像我想的那样干净。
答案 0 :(得分:4)
swifty 方式是使用协议:
protocol Drainable {
static func drain()
}
class Battery : Drainable {
static func drain() { print("battery drained") }
}
class Tank : Drainable {
static func drain() { print("tank drained") }
}
class Gas : Drainable {
static func drain() { print("gas drained") }
}
let syncClasses : [Drainable.Type] = [Battery.self, Tank.self, Gas.self]
for object in syncClasses {
object.drain()
}
答案 1 :(得分:1)
您可以使用.self
从类符号中获取类类型,如下所示:
class Battery {
class func test() {}
}
class Tank {}
class Gas {}
let array: [AnyClass] = [Battery.self, Tank.self, Gas.self]
for thing in array {
if let battery = thing as? Battery.Type {
Battery.test()
}
}