2017-03-29 3 views
-1

var keyCallbacks = kCFTypeDictionaryKeyCallBacks var valueCallbacks = kCFTypeDictionaryValueCallBackskann unveränderlichen Wert des Typs 'UnsafeRawPointer nicht übergeben?' als inout arguement

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 arguement. 
    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 arguement 

    guard let keyItem = extractedItem, resultCode == noErr else { 

     return nil 
    } 

    let result = keyItem as! SecKey 
    return result 

Antwort

0

Verwenden CFDictionary in Swift nicht. Es ist nicht unmöglich, aber nicht die Mühe wert. CFDictionary ist gebührenfrei zu NSDictionary überbrückt, die wiederum von einem Swift Dictionary instanziert werden:

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

aber ich bekomme Fehler für diese Linie lassen Attribute = CFDictionaryCreate (kCFAllocatorDefault, und Tasten, und Werte, 2, & keyCallbacks & valueCallbacks) Können Sie mir sagen, wie diese Methode –

+1

@OmBhagwan: Es gibt keine solche Zeile in meiner Antwort. - Wie gesagt, benutze kein CFDictionary. –

+0

ja @Martin Ich habe nach gesehen gesehen Sie antworten, aber es ist nicht funktionieren. Weil CFDictionaryCreate eine Methode ist, die ein Attribut gibt, das nicht in NSDictionary steht. –

Verwandte Themen