gpt4 book ai didi

ios - Swift 3 CVaListPointer 类型冲突

转载 作者:行者123 更新时间:2023-12-01 19:55:11 24 4
gpt4 key购买 nike

我正在与一个 C 库 - liblinphone 集成。它具有以下 typedef 和我需要从我的 Swift 3 iOS 应用程序调用的函数。

typedef void (*OrtpLogFunc)(const char *domain, 
int lev,
const char *fmt,
va_list args);

void linphone_core_set_log_handler(OrtpLogFunc logfunc);

看来 Swift 正在解释 va_list为模拟器编译时与为设备编译时不同。

这是使用 C 函数的 Swift 代码和

仅当目标是设备时才编译:
class MyClass {
func setupLogging() {
linphone_core_set_log_handler(my_callback)
}
}

func my_callback(_ domain: Optional<UnsafePointer<Int8>>,
level: OrtpLogLevel,
format: Optional<UnsafePointer<Int8>>,
args: CVaListPointer?) { // NOTE: Optional CVAListPointer
// do some logging
}

这仅在目标是模拟器时编译:
class MyClass {
func setupLogging() {
linphone_core_set_log_handler(my_callback)
}
}

func my_callback(_ domain: Optional<UnsafePointer<Int8>>,
level: OrtpLogLevel,
format: Optional<UnsafePointer<Int8>>,
args: CVaListPointer) { // NOTE: CVAListPointer is NOT optional
// do some logging
}

当我在设备上运行时,日志记录工作,所以似乎使用可选的 CVaListPoint?是最安全的,所以我如何让它为模拟器编译。

第一个 版本仅在 上编译和运行设备 但在定位 时会出现此编译器错误模拟器 :
Swift Compiler Error
C function pointer signature
'(Optional<UnsafePointer<Int8>>, OrtpLogLevel,
Optional<UnsafePointer<Int8>>, CVaListPointer?) -> ()'
is not compatible with expected type 'OrtpLogFunc' (aka
'@convention(c)
(Optional<UnsafePointer<Int8>>, OrtpLogLevel,
Optional<UnsafePointer<Int8>>, CVaListPointer) -> ()')

第二版本仅在以 为目标时编译模拟器 ,但是当定位到 时设备 ,它发出此错误:
Swift Compiler Error
Cannot convert value of type
'(Optional<UnsafePointer<Int8>>, OrtpLogLevel,
Optional<UnsafePointer<Int8>>, CVaListPointer) -> ()'
to expected argument type 'OrtpLogFunc!'

有什么方法可以强制模拟器在不更改 C 头文件的情况下接受此功能?

或者,我可以在 Swift 中做些什么来完成这项工作?

最佳答案

您最好将错误报告发送至 Appleswift.org尽快地。

而且,在这个问题得到解决之前,这种编码将是一种解决方法:

let my_callback: OrtpLogFunc = {domain, level, format, _args in
let args: CVaListPointer? = _args
// do some logging
}

关于ios - Swift 3 CVaListPointer 类型冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43033029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com