Swift AnyClass引用类实例还是仅键入?
在下面的示例中,是Swift AnyClass引用类实例还是仅键入?,swift,Swift,在下面的示例中,是stateClass:AnyClass一个类的实际实例,例如,我可以调用它来获取stateClass.name,或者它只是对类类型的引用。我的感觉是,从validChange行可以看出,它只是对类类型的引用,而不是我可以从中提取数据的任何类的实际实例 override func isValidNextState(stateClass: AnyClass) -> Bool { let validChange = stateClass is MonsterAttack
stateClass:AnyClass
一个类的实际实例,例如,我可以调用它来获取stateClass.name
,或者它只是对类类型的引用。我的感觉是,从validChange
行可以看出,它只是对类类型的引用,而不是我可以从中提取数据的任何类的实际实例
override func isValidNextState(stateClass: AnyClass) -> Bool {
let validChange = stateClass is MonsterAttack.Type
return validChange
}
它只是对类类型的引用,即您可以调用:
isValidNextState(SomeClass.self)
它只是对类类型的引用,即您可以调用:
isValidNextState(SomeClass.self)
类是引用类型。因此,当您传递stateClass时,您只需传递指向
MonsterAttack
的stateClass实例的指针。因此stateClass是一个实例是的,但它与传递到isValidNextState
函数中的实例是同一个实例
出现的let validChange
只是选择性地将参数转换为怪物攻击类型
这个答案可能更有用:类是引用类型。因此,当您传递stateClass时,您只需传递指向MonsterAttack
的stateClass实例的指针。因此stateClass是一个实例是的,但它与传递到isValidNextState
函数中的实例是同一个实例
出现的let validChange
只是选择性地将参数转换为怪物攻击类型
这个答案可能更有用:AnyClass
的定义如下:typealias AnyClass=AnyObject.Type
,它是实际的类类型本身。因此,如果您有一个名为“Test”的类
,那么您必须通过Test.self
,并且您只能对其调用静态/类方法/属性和初始值设定项。如果要使用实际实例,请使用AnyObject
(仅适用于类)或Any
(适用于任何对象):
AnyClass
的定义如下:typealias AnyClass=AnyObject.Type
,它是实际的类类型本身。因此,如果您有一个名为“Test”的类
,那么您必须通过Test.self
,并且您只能对其调用静态/类方法/属性和初始值设定项。如果要使用实际实例,请使用AnyObject
(仅适用于类)或Any
(适用于任何对象):
如果要访问该类的实例,可以执行stateMachine!。stateForClass(stateClass)
@sez什么类型的stateMachine
?它是一个GKStateMachine
。请注意,如果状态已构造但尚未添加到状态机,则它将返回nil
。但是由于拥有该状态的状态机调用了isValidNextState
,因此可以在isValidNextState
内部调用stateForClass
。如果要访问该类的实例,可以执行stateMachine!。stateForClass(stateClass)
@sez什么类型的stateMachine
?它是一个GKStateMachine
。请注意,如果状态已构造但尚未添加到状态机,则它将返回nil
。但是由于拥有该状态的状态机调用了isValidNextState
,因此可以在isValidNextState
内部调用stateForClass
。