Swift AnyClass引用Class实例还是仅仅Type?

时间:2015-07-06 16:53:15

标签: swift

在下面的示例中,stateClass: AnyClass是一个类的实际实例,例如我可以调用它来获取stateClass.name,或者它只是对类类型的引用。我的感觉是,从validChange行,它只是对Class Type的引用,而不是我可以从中提取数据的任何类的实际实例?

override func isValidNextState(stateClass: AnyClass) -> Bool {
    let validChange = stateClass is MonsterAttack.Type
    return validChange
}

3 个答案:

答案 0 :(得分:2)

AnyClass定义如下:typealias AnyClass = AnyObject.Type这是实际的类类型本身。所以,如果你有class名字"测试"你必须传递Test.self,你只能调用静态/类方法/属性和初始化器。如果要使用实际实例,请使用AnyObject(仅适用于类)或Any(适用于任何内容):

override func isValidNextState(stateClass: AnyObject) -> Bool {
    let validChange = stateClass is MonsterAttack.Type
    return validChange
}

答案 1 :(得分:1)

它只是对类类型的引用,即你可以调用:

isValidNextState(SomeClass.self)

答案 2 :(得分:1)

类是引用类型。因此,当您传递stateClass时,您只需将指针传递给MonsterAttack的stateClass实例。所以stateClass是一个实例yes,但它是你传递到isValidNextState函数的相同的实例

显示let validChange只是可选地将参数转换为MonsterAttack类型。

这个答案可能会有所帮助:https://stackoverflow.com/a/27366050/4396258