快速将数据转换为UnsafeMutablePointer <Int8>

udi*_*udi 1 objective-c unsafe-pointers ios swift

我正在从Swift的目标C类中调用函数。

-(char *)decrypt:(char *)crypt el:(int)el{}
Run Code Online (Sandbox Code Playgroud)

从swift调用此函数时,它要求提供一个UnsafeMutablePointer<Int8>作为参数“ crypt”的值

“ crypt”的值来自服务器,它是base64编码的字符串。因此,我对该字符串进行了解码,并得到了一个Data对象。

let resultData = Data(base64Encoded: base64String)
Run Code Online (Sandbox Code Playgroud)

现在,我需要将此数据传递给上述函数。我试图将此Data对象转换为UnsafeMutablePointer<Int8>

resultData?.withUnsafeBytes { (u8Ptr: UnsafeMutablePointer<Int8>) in
                    let decBytes = tea?.decrypt(u8Ptr , el: el)}
Run Code Online (Sandbox Code Playgroud)

但是它没有编译。给出以下错误

“ UnsafeMutablePointer”不能转换为“ UnsafePointer <_>”

我对目标c不太了解。因此,谁能帮助我将此参数传递给目标c函数。

Abd*_*ish 5

您必须更改UnsafeMutablePointerUnsafePointer

不安全指针

resultData?.withUnsafeBytes {(bytes: UnsafePointer<CChar>)->Void in
            //Use `bytes` inside this closure

        }
Run Code Online (Sandbox Code Playgroud)

不安全的可变指针

 var data2 = Data(capacity: 1024)
data2.withUnsafeMutableBytes({ (bytes: UnsafeMutablePointer<UInt8>) -> Void in
                 //Use `bytes` inside this closure

            })
Run Code Online (Sandbox Code Playgroud)