eha*_*ro2 1 encryption rsa unmanaged ios swift
我正在一个涉及RSA加密的swift项目中工作,我遇到了如下指针问题:
我有一个全局var publicKey: SecKey?可选值,我需要获取UnsafeMutablePointer<Unmanaged<SecKey>?>指向它的指针,这是SecKeyGeneratePair函数中所需的数据类型 .
我试图将指针定义为:
var keyPointer = UnsafeMutablePointer<Unmanaged<SecKey>?>(publicKey!)
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨a 不能使用@lvalue SecKey类型的参数调用'init'错误
根据使用Swift with Cocoa和Objective-C的书,在Core Foundation和Unmanaged Objects部分中,它声明该Unmanaged<T>结构提供了2种方法takeUnretainedValue()和takeRetainedValue().但试图实现它们,会出现以下错误
var keyPointer = UnsafeMutablePointer<Unmanaged<SecKey>?>(publicKey!.takeRetainedValue())
Run Code Online (Sandbox Code Playgroud)
'SecKey'没有名为'takeRetainedValue'的成员
任何帮助解决这个问题将不胜感激
试试这个:
var publicKey: SecKey?
var privateKey: SecKey?
var publicKeyUnManaged:Unmanaged<SecKey>?
var privateKeyUnManaged:Unmanaged<SecKey>?
let dic:[String:String] = [kSecAttrKeyType:kSecAttrKeyTypeRSA, kSecAttrKeySizeInBits:"2048"]
SecKeyGeneratePair(dic, &publicKeyUnManaged, &privateKeyUnManaged)
publicKey = publicKeyUnManaged?.takeRetainedValue()
privateKey = privateKeyUnManaged?.takeRetainedValue()
Run Code Online (Sandbox Code Playgroud)
您不必UnsafeMutablePointer<Unmanaged<SecKey>?>手动创建.如本文件所述,
当函数声明为接受UnsafeMutablePointer参数时,它可以接受以下任何一项:
- nil,作为空指针传递
- UnsafeMutablePointer值
- 一个输入输出表达式,其操作数是类型为Type的存储左值,它作为左值的地址传递
- 输入输出[类型]值,作为指向数组开头的指针传递,并在调用期间延长寿命
在这种情况下,我们可以使用第3个"in-out"表达式.
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |