swift是否有一个;C类“;协议

swift是否有一个;C类“;协议,swift,Swift,我想将泛型约束为可以用C表示的类型。Swift标准库中是否有所有C类型都符合的协议或类型 func doWithCType<T:CRepresentable>(cValue: T) { // do thing with C type } 我强制将结构强制转换为不兼容的类型(导致崩溃)。这是错误消息:无法将类型为“\uu C.Hodor”(0x1035c0700)的值强制转换为“Swift.CVarArg”(0x107196240)。 我在任何地方都找不到“\uuu C”,但

我想将泛型约束为可以用C表示的类型。Swift标准库中是否有所有C类型都符合的协议或类型

func doWithCType<T:CRepresentable>(cValue: T) {
    // do thing with C type
}
我强制将结构强制转换为不兼容的类型(导致崩溃)。这是错误消息:
无法将类型为“\uu C.Hodor”(0x1035c0700)的值强制转换为“Swift.CVarArg”(0x107196240)。


我在任何地方都找不到“\uuu C”,但我希望C类型有区别。

Swift.CVarArg
你需要什么?它适用于可以通过C的varargs
va_list
机制传递的类型

还有
CVaListPointer
,它相当于
va_list*
。出现在
字符串(格式:)
的参数中


你认为“C代表的一种类型”是什么?任何东西都可以在C中表示为原始内存。。。普通数据类型?一种可以作为c函数参数接受的c类型,如结构或int。我希望避免void*路由。我正在尝试创建Swift/C消息队列。Swift中没有此类本机协议-您必须自己创建它。你在这里想干什么?一旦您将某个内容约束为
CRepresentable
,您打算如何将其传递给C?C目前不能调用Swift,但Swift可以调用C;为了将内容传递给C,您需要知道与C的调用约定相匹配的具体类型。使用
doWithCType(cValue:)
的重载可能会更好(例如,一个用于
Int
,一个用于
Double
,等等)而不是一个通用函数。相关:Swift.CVarArg实际上是我试图转换的导致崩溃的函数。我将编辑我的答案以反映这一点。我认为,如果您想在C和Swift之间传递结构,您将在API中使用
UnsafemtablePointer
COpaquePointer
。c、 最后,我将对void*进行强制转换,但我希望在泛型中的一个函数中包含这种转换。其思想是创建一个到C消息队列的Swift接口。C不能使用快速内存,所以我希望有一个“C类型”约束。否则,它将归结为依赖文档来强制执行C类型。
typedef struct {
    int hodor;
} Hodor;