无法将类型 'UnsafeRawPointer?' 的不可变值作为 inout 参数传递


var keyCallbacks = kCFTypeDictionaryKeyCallBacks
var valueCallbacks = kCFTypeDictionaryValueCallBacks
  
var keys = [Unmanaged.passUnretained(kSecClass).toOpaque(), Unmanaged.passUnretained(kSecAttrApplicationTag).toOpaque(), Unmanaged.passUnretained(kSecAttrKeyType).toOpaque(), Unmanaged.passUnretained(kSecReturnRef).toOpaque()]
var values = [Unmanaged.passUnretained(kSecClassKey).toOpaque(), Unmanaged<AnyObject>.passUnretained(privateTag as AnyObject).toOpaque(), Unmanaged.passUnretained(kSecAttrKeyTypeRSA).toOpaque(), Unmanaged.passUnretained(kCFBooleanTrue).toOpaque()]
// let queryKey = CFDictionaryCreate(kCFAllocatorDefault, &keys, &values, 4, &keyCallbacks, &valueCallbacks)//Error-- for "keys" this error show cannot pass immutable value of type 'UnsafeRawPointer?' as inout argument. 
let queryKey = CFDictionaryCreate(kCFAllocatorDefault, &keys, &values, 4, &keyCallbacks, &valueCallbacks)
    
// Get the key.
var extractedItem: AnyObject?
let resultCode = SecItemCopyMatching(queryKey, &extractedItem)//cannot pass immutable value of type 'UnsafeRawPointer?' as inout argument
    
guard let keyItem = extractedItem, resultCode == noErr else {
        
return nil

不要在 Swift 中使用 CFDictionary。这不是不可能,但不是值得麻烦。 CFDictionary免费电话桥接NSDictionary反过来可以从 Swift Dictionary实例化:

let query: NSDictionary = [
    kSecClass: kSecClassKey,
    kSecAttrApplicationTag: privateTag,
    kSecAttrKeyType: kSecAttrKeyTypeRSA,
    kSecReturnRef: true
]
var extractedItem: AnyObject?
let resultCode = SecItemCopyMatching(query, &extractedItem)

相关内容

最新更新