swift - 在设备之间传输 CGPoint 的最佳方式是什么?

标签 swift nsdata nsnumber nskeyedarchiver cgpoint

我正在使用 swift 开发一款回合制游戏,其中所有内容都必须转换为 NSData。现在我已经被困在“NS-stuff”上很多天了。因为CGPoint不是对象而是结构体,不能直接转为NSData,CGPoint内部的CGFloat也是如此。我想做的是:(只是一个想法,不确定它是否有效。)

  1. 将 CGPoint 转换为 2 个不同的 Float
  2. 用 Float 创建 NSNummer
  3. 使用 NSNumber 创建 NSData
  4. 在另一台设备上将 NSData 转换回 NSNumber
  5. 将 NSNumber 转换为 Float
  6. 将它们合并回 CGPoint

这种方式太复杂了。 有没有更好的方法来实现它或任何最佳实践?提前致谢!!!

PS:NSKeyedArchiver 不应该考虑,因为它的性能。 (不确定!)

最佳答案

编码CGPoint 的最简单方法是使用NSStringFromCGPointCGPointFromString。这消除了您将面临的所有 32/64 位问题。

这种传输非常便宜(不到一个 MTU,所以这并不重要)。唯一可能昂贵的是字符串解析,它几乎肯定会被传输到网络上的成本所淹没。

但是如果你有一个非常严格的网络协议(protocol)并且需要最好的性能,我会将 CGPoint 转换成一个 (Float32, Float32),或者更好的是,一个(Int32, Int32) 如果您实际上不需要非整数值。假设您不关心字节顺序,这很容易按照@robmayoff 的建议进行编码。不过,使用 Int,您可以轻松地使用 Int.bigEndianInt(bigEndian:) 来处理这个问题。

关于swift - 在设备之间传输 CGPoint 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25714639/

相关文章:

ios - PickerView selectedValue anyObject 返回 nil

objective-c - Swift 只读外部,可读写内部属性

ios - 在我的 swift 应用程序中将 NSData 解析为 Json 失败

java - Java 的 NSData 类型?

objective-c - 使用 NSData 和 NSCoding 加载 iOS 自定义文件格式

objective-c - 如何将 "int"值存储在 NSMutableArray* 或 NSMutableDictionary* 中?以整数形式传入的 JSON 数据的长期问题。

objective-c - 来自 CGFloat 的 NSNumber

ios - 带有名为 `imageView` 的 IBOutlet 的 UITableViewCell 与父类(super class) IBOutlet 冲突的错误

ios - NSN数运算

ios - SWIFT Apple Mach-O 链接器错误 "_OBJC_CLASS_$_BFExectur"