我试图从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())
}
}
答案 0 :(得分:2)
您需要处理以下几个问题:
[SomeClass class]
是SomeClass.self
。entryWithIdentifier
在ObjC中返回id
,您通常希望将其转换为适当的Swift类型(因为您无法调用方法或访问{的{1}} {1}})。AnyObject
可以在ObjC中返回entryWithIdentifier
,这意味着它在Swift中返回一个可选项。桥接使得这是一个隐式解包的可选项,如果您计划将这些动画添加到阵列中或以其他方式使用它们,则会使您离崩溃一步 - 最好自己检查可选项。此外,您的nil
数组看起来很可疑 - 您正在为一个数组分配一个元素,一个布尔值是询问场景源它是什么类的结果。 (此布尔值始终为animationIDs
,因为false
不是SCNSceneSource
的种类。)
因此,您的方法可能如下所示:
CAAnimation
(包括一些尝试推断你的意图,并减少类型推断所允许的代码。)