Ios 如何在swift中传递C指针
我在目标C中使用C指针 这是我的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中使用指针非
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?
当您声明一些非可选基元类型的变量时,可能会出现一些错误,在这种情况下,不要使用Optionals,而只给它们初始值CUnsignedLong
- 当需要为
或unsafetablepointer
传递参数时,通常会声明类型为UnsafePointer
的变量,并将其作为inout参数传递(由前缀“&”指定)AType
的参数类型变为ListReaders
unsafemeutablepointer代码>和
非女性化指针代码>,因此需要声明类型为
(=UnsafeMutablePointer?
)和UnsafeMutablePointer?
(=UInt
)的变量CUnsignedLong
列表阅读器的功能,看看使用CChar
和指针是否有意义?什么版本的Swift?