无法为Unmanaged <anyobject>调用初始值设定项?在swift中没有参数

时间:2017-08-22 09:35:56

标签: ios swift base64 rsa

我想要的是使用swift将RSA Sec密钥转换为base64编码的字符串。所以我initialized变量如下,

var publicKeyBits = Unmanaged<AnyObject>?()

然后它给出了

  

无法为Unmanaged调用初始值设定项?没有参数   在快速

我想隐藏我的publickey,如下所示

var publicKeyBits = Unmanaged<AnyObject>?()
SecItemCopyMatching(queryAttrs, &publicKeyBits)

let opaqueBits = publicKeyBits?.toOpaque() 
let publicKeyData = Unmanaged<NSData>.fromOpaque(opaqueBits).takeUnretainedValue()

let publicKeyBase64 = publicKeyData.base64EncodedData(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)

错误。任何想法。

2 个答案:

答案 0 :(得分:0)

您需要检查Unmanaged类的初始化,可能有一些初始化参数。

 plotOptions: {
   series: {
     cursor: 'pointer',
     point: {
       events: {
         click: function() {
           console.log(this); 
           alert('Category: '+ this.category +', value: '+ this.y + 'Series: ' +  this.series.name + ' ID: ' + this.config[2])
         }
       }
     }
   }
 },

答案 1 :(得分:0)

SecItemCopyMatching被声明为

public func SecItemCopyMatching(_ query: CFDictionary,
                               _ result: UnsafeMutablePointer<CFTypeRef?>?) -> OSStatus

所以你必须传递一个CFTypeRef?的地址作为inout参数。 (在早期的Swift版本中,此函数返回了一个非托管对象, 情况不再如此。)

您将项目检索为CFTypeRefAnyObject的类型),然后将其转换为实际类型。例如:

var result: CFTypeRef?
let status = SecItemCopyMatching(queryAttrs, &result)
if status == errSecSuccess {
    if let publicKeyData = result as? Data {
        let base64 = publicKeyData.base64EncodedString()
    }
}