gpt4 book ai didi

ios - 如何在 swift 中传递 C 指针

转载 作者:可可西里 更新时间:2023-11-01 01:26:18 26 4
gpt4 key购买 nike

我在 objective-c 中使用 C 指针

这是我的 C 函数:

long ListReaders(
__out char** szReadersList,
__out unsigned long* pulListLen){
}

long Result;
char* pszReadersList;
unsigned long pulListLen;
Result=ListReaders(&pszReadersList, & pulListLen);

在 Objective C 中使用指针非常容易,但是当我在 swift 中尝试使用其他指针概念时,如 UnsafeMutablePointerUnsafePointer 等。

如何在 swift 中使用相同的 C 函数

我试过用它是这样显示的

var Result :CLong?  
var pszReadersList :CChar?
var pulListLen: CUnsignedLong?
Result=ListReaders(szReadersList:UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!>, pulListLen: UnsafeMutablePointer<UInt>!UnsafeMutablePointer<UInt>!>)

你们能不能给我建议一下 C 指针在 swift 中的用法

最佳答案

调用 C 函数的代码应该是这样的:

    var result: CLong = 0
var pszReadersList: UnsafeMutablePointer<CChar>? = nil
var pulListLen: CUnsignedLong = 0
result = ListReaders(&pszReadersList, &pulListLen)

几点:

  • 在 C/Objective-C 中,没有原始可选类型,因此在 Swift 中使用 C/Objective-C 函数时不应使用它们。

    CLong? -> CLong , CUnsignedLong? -> CUnsignedLong

    当你声明一些非可选原始类型的变量时,你可能会得到一些错误,在这种情况下,不要使用可选,而只是给它们初始值。

  • 当您需要为 UnsafeMutablePointer<AType> 传递参数时或 UnsafePointer<AType> , 你通常声明一个 AType 类型的变量并将其作为 inout 参数传递(由前缀“&”指定)。

    你的ListReaders的参数类型变成 UnsafeMutablePointer<UnsafeMutablePointer<Int8>?>!UnsafeMutablePointer<UInt>! , 所以你需要声明 UnsafeMutablePointer<Int8>? 类型的变量(== UnsafeMutablePointer<Int8>? ) 和 UInt (== CUnsignedLong )。

关于ios - 如何在 swift 中传递 C 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445382/

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