Swift - 创建一个类数组

时间:2016-09-30 18:32:57

标签: swift

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()]

但是我必须创建我想要调用方法而不是类函数的函数,而不是像我想的那样干净。

2 个答案:

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