2

在 GameplayKit 中,我想符合 GKAgentDelegate 协议,因此使用委托方法func agentDidUpdate(agent: GKAgent)

问题是,在这个方法中,参数agent被声明为GKAgent,而不是GKAgent2D,所以我无法访问agent.position,因为position属性在GKAgent2D,而不是GKAgent...

然而在 Objective-C API 中,代理被声明为 GKAgent2D。

请帮忙。

4

1 回答 1

2

作为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)。

于 2015-06-17T08:00:09.527 回答