无法为Unmanaged< AnyObject>调用初始化程序?没有争论的迅速 [英] cannot invoke initializer for Unmanaged<AnyObject>? with no arguments in swift
问题描述
我想要的是快速地将RSA
Sec
密钥转换为base64
编码的字符串.所以我initialized
像下面这样的变量,
what I want is to convert RSA
Sec
key into base64
encoded string with swift. so I initialized
a variable like below,
var publicKeyBits = Unmanaged<AnyObject>?()
然后它给出
无法为非托管"调用初始化程序吗?没有参数 迅速
cannot invoke initializer for Unmanaged? with no arguments in swift
我想像下面那样隐蔽我的publickey
I want to covert my publickey
like below
var publicKeyBits = Unmanaged<AnyObject>?()
SecItemCopyMatching(queryAttrs, &publicKeyBits)
let opaqueBits = publicKeyBits?.toOpaque()
let publicKeyData = Unmanaged<NSData>.fromOpaque(opaqueBits).takeUnretainedValue()
let publicKeyBase64 = publicKeyData.base64EncodedData(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
错误.任何想法.
推荐答案
SecItemCopyMatching
被声明为
public func SecItemCopyMatching(_ query: CFDictionary,
_ result: UnsafeMutablePointer<CFTypeRef?>?) -> OSStatus
,因此您必须将CFTypeRef?
的地址作为inout参数传递.
(在早期的Swift版本中,此函数返回了一个非托管对象,
不再是这种情况了.)
so you have to pass the address of a CFTypeRef?
as inout argument.
(In early Swift versions this function returned an unmanaged object,
that is no longer the case.)
您以CFTypeRef
(AnyObject
的类型别名)形式检索该项目,然后将其转换为实际类型.示例:
You retrieve the item as a CFTypeRef
(a typealias for AnyObject
) and then cast it to the actual type. Example:
var result: CFTypeRef?
let status = SecItemCopyMatching(queryAttrs, &result)
if status == errSecSuccess {
if let publicKeyData = result as? Data {
let base64 = publicKeyData.base64EncodedString()
}
}
这篇关于无法为Unmanaged< AnyObject>调用初始化程序?没有争论的迅速的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!