在 GameplayKit 中,我想符合 GKAgentDelegate 协议,因此使用委托方法func agentDidUpdate(agent: GKAgent)
。
问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position
,因为position属性在GKAgent2D,而不是GKAgent...
然而在 Objective-C API 中,代理被声明为 GKAgent2D。
请帮忙。
在 GameplayKit 中,我想符合 GKAgentDelegate 协议,因此使用委托方法func agentDidUpdate(agent: GKAgent)
。
问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position
,因为position属性在GKAgent2D,而不是GKAgent...
然而在 Objective-C API 中,代理被声明为 GKAgent2D。
请帮忙。
作为GKAgent2D
的子类GKAgent
,您可以简单地向上转换它:
func agentDidUpdate(agent: GKAgent) {
if let agent2d = agent as? GKAgent2D {
// do thing with agent2d.position
}
}
GKAgentDelegate
(来自 Xcode 7,beta 1;即 OSX 10.11 SDK)的文档显示GKAgent
两种语言的相同类型 ( ):
因此,为了严格正确,它应该一直GKAgent
在 Objective-C 之下,但是 Objective-C 的类型安全性不如 Swift,所以你可以摆脱它(如果一个对象,你可能会得到一个unrecognized selector
异常GKAgent
曾经传递给委托方法,而您认为它是GKAgent2D
)。