Swift GKAgentDelegate 的协议方法不对?
The protocol method of GKAgentDelegate is not right in Swift?
在GameplayKit中,我想遵循协议GKAgentDelegate,因此使用委托方法func agentDidUpdate(agent: GKAgent)
。
问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position
,因为位置属性在GKAgent2D中,而不是GKAgent。 ..
然而在Objective-CAPI中,代理被声明为GKAgent2D。
请帮忙。
因为GKAgent2D
是GKAgent
的子类,你可以简单地upcast它:
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,所以你可以摆脱它(如果 GKAgent
对象曾经传递给委托方法并且您认为它是 GKAgent2D
,您可能会得到 unrecognized selector
异常)。
在GameplayKit中,我想遵循协议GKAgentDelegate,因此使用委托方法func agentDidUpdate(agent: GKAgent)
。
问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position
,因为位置属性在GKAgent2D中,而不是GKAgent。 ..
然而在Objective-CAPI中,代理被声明为GKAgent2D。
请帮忙。
因为GKAgent2D
是GKAgent
的子类,你可以简单地upcast它:
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,所以你可以摆脱它(如果 GKAgent
对象曾经传递给委托方法并且您认为它是 GKAgent2D
,您可能会得到 unrecognized selector
异常)。