从Swift调用C非常简单,但是我正在考虑在C中制作一个双向 Package 器,所以我的C必须调用Swift函数。
现在,我可以通过在C中声明函数指针来做到这一点,并在Swift端设置它们以调用Swift中的代码之后,让我的C函数调用它们。
我的C头文件:
typedef void (*callback_t)(void);
void callBackIntoSwift( callback_t cb );
我的C实现文件:
#include "stuff.h"
#include <stdio.h>
void callBackIntoSwift( callback_t cb )
{
printf( "Will call back into Swift\n" );
cb();
printf( "Did call back into Swift\n" );
}
在桥接头文件中包含我的C头文件之后,我可以在Swift端执行以下操作:
let cb: callback_t = {
someKindOfSwiftFunction()
}
callBackIntoSwift( cb )
或者甚至:
callBackIntoSwift {
someKindOfSwiftFunction()
}
我想让C端直接调用someKindOfSwiftFunction
......但是当我尝试将@convention (c)
应用于函数声明时,我得到的消息是该属性只能应用于类型,而不是声明。
Github中有什么想法或代码库可以让我看看吗?
3条答案
按热度按时间yiytaume1#
根据Joe Groff:
目前还没有正式的方法。除了名称篡改,Swift函数使用与C不同的调用约定。非官方的,如果你愿意处理比通常更多的代码中断和编译器错误,有一个非官方的属性
@_cdecl
可以做到这一点:你可以从C:
pqwbnv8z2#
你可以这样做:
FileSwift.swift
FileSwiftWrapper.h
FileSwiftWrapper.m
wbgh16ku3#
在C和Swift之间传递值
在C中
在斯威夫特