尝试重写为 Myo 编写的 Objective-C 代码我遇到了 GLKQuaternion 类,它是一个联合,并且似乎在 Swift 中不受支持( Using GLKMath from GLKit in Swift )。
我正在寻找一种解决方法来使其发挥作用。也许是一个混合应用程序,数学是在 ObjectiveC 中完成的,这样我就可以访问这些属性。我有什么选择?
最佳答案
最终使用了一个桥接文件并创建了一个小的包装层,以允许我从 Swift 访问我想要的数据。我将其称为“polyfill”,类似于我们在网络上增强旧浏览器功能的东西。
code is available on github 。特别是this commit将会引起人们的兴趣,因为它显示了需要做什么。
Polyfill.h
@interface OrientationData: NSObject
@property (nonatomic) TLMAngle *pitch;
@property (nonatomic) TLMAngle *yaw;
@property (nonatomic) TLMAngle *roll;
@end
@implementation OrientationData
@end
@interface GLKitPolyfill: NSObject
+ (OrientationData *) getOrientation:(TLMOrientationEvent *)orientationEvent;
@end
Polyfill.m
+ (OrientationData *) getOrientation:(TLMOrientationEvent *)orientationEvent {
TLMEulerAngles *angles = [TLMEulerAngles anglesWithQuaternion:orientationEvent.quaternion];
OrientationData *result = [OrientationData new];
result.pitch = angles.pitch;
result.yaw = angles.yaw;
result.roll = angles.roll;
return result;
}
ViewController.swift
let angles = GLKitPolyfill.getOrientation(orientationEvent)
let pitch = CGFloat(angles.pitch.radians)
let yaw = CGFloat(angles.yaw.radians)
let roll = CGFloat(angles.roll.radians)
Apples Mix & Match guide提供了关于如何使 Obj-C 与 Swift 一起工作的好技巧,反之亦然。
关于swift - Swift 中的 GLK 四元数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26571371/