gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 10:02:19 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com