尝试重新编写为Myo编写的objective-c代码时遇到了glkquaternion类,该类是一个联合,在swift中似乎不受支持(Using GLKMath from GLKit in Swift)。
我要找的是一个解决办法,使这个工作。可能是一个混合应用程序,在objectivec中进行数学运算,这样我就可以访问这些属性。我有什么选择?
最佳答案
最后使用了一个桥接文件并创建了一个小的包装层,允许我访问我想从swift获得的数据。我称之为polyfill,类似于我们在网络上增强旧浏览器功能的方法。
code is available on github。尤其是this commit将是有趣的,因为它显示了需要做什么。
聚填料
@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
聚乙烯填料.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;
}
视图控制器.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一起工作给出了很好的提示,反之亦然。