在下面的示例中,stateClass: AnyClass
是一个类的实际实例,例如我可以调用它来获取stateClass.name
,或者它只是对类类型的引用。我的感觉是,从validChange
行,它只是对Class Type的引用,而不是我可以从中提取数据的任何类的实际实例?
override func isValidNextState(stateClass: AnyClass) -> Bool {
let validChange = stateClass is MonsterAttack.Type
return validChange
}
答案 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