尝试重新编写为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一起工作给出了很好的提示,反之亦然。

09-07 16:46