我正在尝试将目标c中的iOS应用程序重写为swift。 我正在使用序列化来通过某种通信层发送数据。 在目标c中,我在每个结构的顶部使用#pragma pack(1),以便在数据成员之间使用顺序布局而不填充。 我试图在结构的顶部使用PRAGMA_STRUCT_PACK。 它似乎在游乐场工作,但在我的应用程序中实现它时,我收到一条错误消息:“顶级不允许表达”。
答案 0 :(得分:1)
Swift不支持显式指定结构类型的数据布局。 (至少,目前还没有。File a bug如果有你想看到的功能,也许Apple会将它们放在未来的版本中?)现在最好的办法是宣布布局敏感的结构(和功能)在C中访问它们并从Swift中调用它们。
在Swift源代码中编写PRAGMA_STRUCT_PACK
会给您一个错误,因为该宏一旦从C导入,就会计算为文字1
。在C中,您应该使用该宏来检测编译器是否支持#pragma pack
(在继续发出#pragma pack
指令之前)。
(你可能会在早期的Swift测试版中看到令人困惑的答案/评论,因为lots of people were looking for #pragma mark
。但这不是他们所谈论的#pragma
。)
答案 1 :(得分:-5)
Swift不是C.如果你关心内存中结构的布局,那你就错了。我的意思是为什么你会对这种实现细节感兴趣? Swift将按照自己想要的方式布局,而不是其他方式。它不是汇编语言。
顺便说一句。尝试使用压缩结构进行序列化是完全错误的。创建一个字节数组并写入要写入的内容。