【发布时间】:2015-10-28 21:36:41
【问题描述】:
这个代码在swift中的等价物是什么?
sprite.physicsBody = [SKPhysicsBody bodyWithFile: bodyFile];
【问题讨论】:
标签: ios objective-c swift sprite-kit
这个代码在swift中的等价物是什么?
sprite.physicsBody = [SKPhysicsBody bodyWithFile: bodyFile];
【问题讨论】:
标签: ios objective-c swift sprite-kit
官方SKPhysicsBody类没有这个方法,所以它必须是一个扩展。但只要我们谈论的是 Swift 替代方案,它要么必须是一个
sprite.physicsBody = SKPhysicsBody.bodyWithFile(bodyFile)
或
sprite.physicsBody = SKPhysicsBody(file: bodyFile)
取决于 Swift 处理您的扩展的能力。
【讨论】:
答案并不完全清楚。
一方面,您没有告诉我们bodyFile 参数的类型。在本文的其余部分,我假设它的类型是 BodyFileType。
使用 initWithBodyFile 之类的 init 方法,Swift 编译器会识别“initWithXXX”命名模式并创建一个您可以这样调用的 init 方法:
Class SKPhysicsBody
{
init(bodyFile: BodyFileType)
{
//init code
}
}
你可以这样称呼它:
SKPhysicsBody.body(file: bodyFile)
Objective-C 方法不是 init 方法,它是一种方便的“类工厂”方法,用于创建并返回一个对象。
我不认为 Swift 对这样的方法有任何特殊处理。相反,您只需根据它的 Objective-C 签名来调用它。
sprite.physicsBody = SKPhysicsBody.bodyWithFile(bodyFile)
【讨论】: