Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift中传递C指针_Ios_C_Swift_Pointers - Fatal编程技术网

Ios 如何在swift中传递C指针

Ios 如何在swift中传递C指针,ios,c,swift,pointers,Ios,C,Swift,Pointers,我在目标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中使用指针非

我在目标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中使用指针时,还有其他一些概念,如
unsafetablepointer
UnsafePointer

如何在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>!>)
var结果:阻塞?
var pszReadersList:CChar?
var pulListLen:CUnsignedLong?
结果=ListReaders(szReaderList:UnsafeMutablePointer!UnsafeMutablePointer!>,PullListLen:UnsafeMutablePointer!UnsafeMutablePointer!>)

你们能建议我在swift中使用C指针吗?调用C函数的代码应该是这样的:

    var result: CLong = 0
    var pszReadersList: UnsafeMutablePointer<CChar>? = nil
    var pulListLen: CUnsignedLong = 0
    result = ListReaders(&pszReadersList, &pulListLen)
var结果:CLong=0
var pszReadersList:不可女性化指针?=无
var pulListLen:CUnsignedLong=0
结果=列表阅读器(&pszReadersList,&pulListLen)

有几点:

  • 在C/Objective-C中,没有基本选项,因此在Swift中使用C/Objective-C函数时不应使用它们

    CLong?
    ->
    CLong
    CUnsignedLong?
    ->
    CUnsignedLong

    当您声明一些非可选基元类型的变量时,可能会出现一些错误,在这种情况下,不要使用Optionals,而只给它们初始值

  • 当需要为
    unsafetablepointer
    UnsafePointer
    传递参数时,通常会声明类型为
    AType
    的变量,并将其作为inout参数传递(由前缀“&”指定)

    ListReaders
    的参数类型变为
    unsafemeutablepointer
    非女性化指针,因此需要声明类型为
    UnsafeMutablePointer?
    (=
    UnsafeMutablePointer?
    )和
    UInt
    (=
    CUnsignedLong
    )的变量


您能否展示一下
列表阅读器的功能,看看使用
CChar
和指针是否有意义?什么版本的Swift?