当前位置: 首页 > 知识库问答 >
问题:

如何在swift中声明#pragma pack(1)

佟阳飙
2023-03-14

我正在尝试将一个iOS应用程序从objective c改写成Swift。我使用序列化是为了通过某种通信层发送数据。在objective c中,我在每个结构的顶部使用#pragma pack(1),以便使用顺序布局,而不在数据成员之间填充。我尝试在结构的顶部使用PRAGMA_STRUCT_PACK。它似乎在操场上起作用,但在我的app中实现它时,我得到了一条错误信息,上面写着:“在顶层不允许使用表达式”。

共有1个答案

鲁旭
2023-03-14

Swift不支持显式指定结构类型的数据布局。(至少,目前还没有。如果有你想要看到的功能,请提交一个bug,也许苹果会在未来的版本中添加这些功能?)目前,您最好的方法是用C语言声明布局敏感的结构(以及访问它们的函数),并从Swift调用这些结构。

在Swift源代码中编写pragma_struct_pack时会出现错误,因为该宏从C导入后,计算结果为字面的1。在C语言中,您应该使用该宏来检测编译器是否支持#pragma pack(然后再发出#pragma pack指令)。

(您可能会看到令人困惑的答案/评论,因为在早期的Swift测试版中,很多人都在寻找#pragma。但这不是他们所说的#pragma。)

 类似资料:
  • 问题内容: 如果我在Swift中需要自定义类型,可以,该怎么办?(类似于闭包语法typedef) 问题答案: 使用关键字代替

  • 问题内容: 我想在Swift中存储一系列弱引用。数组本身不应该是一个弱引用-它的元素应该是。我认为可可对此提供了非类型安全的版本。 问题答案: 创建通用包装,如下所示: 将此类的实例添加到您的数组。 定义时,可以使用或。 另外,为了帮助获取数组内容,您可以按照以下方式进行操作: 上面的用法应替换为-但我不认为当前的Swift语言允许这样定义扩展。

  • 问题内容: 我想制作一个可以在整个应用程序中访问的自定义对象的全局数组(AppDelegate,ViewController类,TableViewController类等)。我已经研究了一种解决方法,但没有找到答案。我曾尝试将数组设置为公共范围,但是收到了编译器警告,提示当我尝试在其他文件中访问该数组时,出现错误提示 我将如何使该数组可被应用程序中的所有文件全局访问,我将在哪里实例化该数组? 问题

  • 问题内容: 我们可以在Objective-C中声明以下块。 我试图迅速做到这一点,它给错误。 错误:使用未声明的“ completionFunction” 定义: 这该怎么做? 更新: 根据@jtbandes的回答,我可以创建带有多个参数的闭包,例如 问题答案: 在对函数类型的语法是。 请注意,从Swift 3+开始,仅需在输入类型周围加上括号。

  • 问题内容: 对于上述代码,快速二进制文件抱怨“未处理错误,因为未将封闭函数声明为” throws”。 我如何在上面声明“ someProperty”“抛出”? 和 和 似乎不起作用。 问题答案: Swift 5更新:仍然不可能。 从Swift 3开始: 您不能从计算的属性中抛出。如果要抛出,必须使用一个函数。Swift编程语言末尾的“ 语言参考”部分的“声明”部分仅列出(和)作为函数和初始化声明的

  • 问题内容: 假设我有一个通用类: 这些声明之间有什么区别? 问题答案: 没有泛型参数就不能存在泛型类型,因此省略泛型类型意味着您希望编译器推断该类型。 在这种情况下,要推断的逻辑类型为。 请注意,这仅适用于您使用了内部声明。它不适用于其他泛型类。 可以在变量声明中使用类似的通用参数推断: