如何使用SCNSceneSource方法entryWithIdentifier:classType:?

时间:2014-06-25 19:41:42

标签: swift scenekit

我试图从DAE文件中提取动画,如何在swift中使用此方法?

谢谢,

Objective-C代码是:

// CAAnimation * animation = [sceneSource entryWithIdentifier:animationIDs [index] withClass:[CAAnimation class]];

func extractAnimationsFromSceneSource(sceneSource: SCNSceneSource) {

    let animationsIDs: NSArray = [sceneSource.isKindOfClass(CAAnimation)]

    let animationCount: Int = animationsIDs.count
    var longAnimations = NSMutableArray(capacity: animationCount)

    let maxDuration: CFTimeInterval = 0

    for index in 0..animationCount {
// gets error CAAnimation is not convertible to 'AnyClass'
        let animation = sceneSource.entryWithIdentifier(animationsIDs[index], withClass:CAAnimation())
    }

}

1 个答案:

答案 0 :(得分:2)

您需要处理以下几个问题:

  • Swift相当于[SomeClass class]SomeClass.self
  • 由于entryWithIdentifier在ObjC中返回id,您通常希望将其转换为适当的Swift类型(因为您无法调用方法或访问{的{1}} {1}})。
  • 如果没有找到条目,
  • AnyObject可以在ObjC中返回entryWithIdentifier,这意味着它在Swift中返回一个可选项。桥接使得这是一个隐式解包的可选项,如果您计划将这些动画添加到阵列中或以其他方式使用它们,则会使您离崩溃一步 - 最好自己检查可选项。

此外,您的nil数组看起来很可疑 - 您正在为一个数组分配一个元素,一个布尔值是询问场景源它是什么类的结果。 (此布尔值始终为animationIDs,因为false不是SCNSceneSource的种类。)

因此,您的方法可能如下所示:

CAAnimation

(包括一些尝试推断你的意图,并减少类型推断所允许的代码。)