我在 Swift 中尝试使用适用于 iOS 的 DJI-SDK 时遇到了非常糟糕的情况。
该 SDK 是用 Objective-c 编写的,使用键值系统来存储值并向无人机发送命令,因此如果您需要告诉无人机启用虚拟摇杆,您需要执行以下操作:
DJISDKManager.keyManager()?.setValue(true as NSNumber, for: enableVirtualStickModeKey!, withCompletion: { (error) in......
这非常简单,因为我们的值是一个Bool
强制转换NSNumber
,当我需要发送结构值(如虚拟棒的位置(Objective-c 结构))时,问题就开始了,这是使无人机上升到 1 的值的示例小姐:
var controlData = DJIVirtualStickFlightControlData()
controlData.verticalThrottle = 1
controlData.pitch = 0
controlData.roll = 0
controlData.yaw = 0
DJISDKManager.keyManager()?.setValue(controlData, for: virtualSticksKey!, withCompletion: { (error) in..
但 SDK 因尝试设置值时出错而失败。我写信给 DJI 支持团队,答案是他们希望社区可以帮助我解决问题....
问题是我需要进行什么类型的转换才能将此DJIVirtualStickFlightControlData
对象转换为与 Objective-C 兼容的类型?
这是DJIVirtualStickFlightControlData
来自的定义DJIFlightControllerBaseTypes.h
typedef struct
{
float pitch;
float roll;
float yaw;
float verticalThrottle;
} DJIVirtualStickFlightControlData;
这是 setValue 方法的定义DJIKeyManager.h
/**
* Performs a set on a settable key, changing attributes on the connected product.
*
* @param value A value object relevant to the given key
* @param key A valid settable key
* @param completion A set completion block.
*/
- (void)setValue:(id)value
forKey:(DJIKey *)key
withCompletion:(DJIKeyedSetCompletionBlock)completion;