C结构如何?
typedef struct {
double a;
int8_t b[5];
int32_t c;
} Foo;
成功在Swift中建模吗? (为避免歧义,使用固定宽度的整数,请随时将其替换为char
和int
)
将C结构导入Swift时,静态大小的数组将转换为元组,并且保证内存布局是相同的。但是,采用另一种方法并不容易,因为这需要我们手动指定可能较长的元组类型。
为了澄清:以上结构可以建模为
struct Foo {
var a: Double
var b: (Int8, Int8, Int8, Int8, Int8)
var c: Int32
}
是否有一种方法可以简化此过程,例如使用预处理器宏或像c ++的std::array
这样的特殊类型?例如,如下所示:
struct Foo {
var a: Double
var b: C_CHAR_ARRAY(5)
var c: Int32
}
您的帖子中有几个问题,所以我将尝试回答所有问题。
Swift中结构的布局不像C中那样按源顺序排序,因此您不能在Swift中编写相同的结构表示形式。编译器可以根据需要打包和重新排列它。因此,如果要使用C布局,则必须使用C来定义结构。
作为一种简单的方法来创建由一定数量的元素组成的元组,没有一种简单的方法可以做到这一点。您可以用C定义它,手写所需的内容,或使用Sourcery之类的工具来生成它。