Из C мне нужно вызвать некоторый код Swift, который принимает входной байтовый массив и создает выходной байтовый массив.
Это в заголовке моста:
typedef void (*SwiftFunc)(const uint8_t* input, int inputLen, uint8_t** output, int* outputLen);
extern "C" void CFunc(SwiftFunc swiftFunc);
Вот реализация C CFunc:
void CFunc(SwiftFunc swiftFunc) {
char* input = "Hello world";
int inputLen = strlen(input);
char* output = NULL;
int outputLen = 0;
swiftFunc(input, inputLen, &output, &outputLen);
// do something with the output here
}
А вот и код Swift:
func swiftFunc(
input: Optional<UnsafePointer<UInt8>>,
inputLen: Int32,
output:Optional<UnsafeMutablePointer<
Optional<UnsafeMutablePointer<UInt8>>>>,
outputLen:Optional<UnsafeMutablePointer<Int32>>) -> Void {
let cfInput = CFDataCreate(kCFAllocatorDefault, input, CFIndex(inputLen))
let cfOutput = ... generate the output ...
How to pass the output buffer back to C?
}
Как передать выходной буфер из Swift в C? Учитывая, что задействован двойной указатель.
Кроме того, подпись функции Swift кажется очень многословной, это ожидается? Я попытался использовать суффиксы ?
вместо Optional<>
, но компилятору это не понравилось.