C与Swift的互操作性

时间:2016-04-15 22:21:33

标签: ios c arrays swift struct

我在Swift 2.2 iOS项目中包含了一个C结构。 C结构通过头文件公开:

   #define NUM_BINS 10;
   typedef struct
   {
       float bin_size;
       unsigned short counts[NUM_BINS];
       unsigned int cleanSamples;
       unsigned short compressCount;
       unsigned short totalSamples;
       bool isMature;
   } SD;

然后我尝试通过以下方式在Swift中声明这个结构:

    var counts: [UInt16] = [1,2,3,4,5,6,7,8,9,10]
    let sd = SD(bin_size: 500, counts: counts, cleanSamples: 0, compressCount: 0, totalSamples: 0, isMature: false)

但收到以下错误:

无法将'[UInt16]'类型的值转换为预期的参数类型'(UInt16,UInt16,UInt16,UInt16,UInt16,UInt16,UInt16,UInt16,UInt16,UInt16)'

如何将其从C转换为Swift?

谢谢!

1 个答案:

答案 0 :(得分:3)

固定大小的C数组变成Swift元组而不是Swift数组。 (请参阅here了解一些不幸的后果。)所以而不是

var counts: [UInt16] = [1,2,3,4,5,6,7,8,9,10]

你需要像

这样的东西
var counts = (1,2,3,4,5,6,7,8,9,10)

顺便说一句,我在Apple的官方文档中没有找到任何说法。我不知道是否有理由担心它将来会发生变化......