我在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?
谢谢!
答案 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的官方文档中没有找到任何说法。我不知道是否有理由担心它将来会发生变化......