Abbiamo avuto questo frammento di codice con la versione precedente di Swifterrori di tipo 2.0 portachiavi veloci per SecItemCopyMatching
var retrievedData: NSData?
var extractedData: Unmanaged<AnyObject>? = nil
let status = SecItemCopyMatching(keyChainQuery, &extractedData)
if (status == errSecSuccess) {
if let validExtractedData = extractedData {
let opaque = validExtractedData.toOpaque()
retrievedData = Unmanaged<NSData>.fromOpaque(opaque).takeUnretainedValue()
}
}
Tuttavia, questo ci dà il seguente errore:
Cannot convert value of type 'inout Unmanaged?' (aka 'inout Optional>') to expected argument type 'UnsafeMutablePointer' (aka 'UnsafeMutablePointer>')
Sono un po ' perso su come risolverlo. Suppongo di dover allocare memoria, creare un UnsafeMutablePointer e quindi fornirlo a SecItemCopyMatching?
ho provato questo:
let sizeOfKey = 32
var store = NSMutableData(capacity: sizeOfKey)!
let status = SecItemCopyMatching(keyChainQuery, store.bytes)
Ma questo mi ha dato una:
Cannot convert value of type 'UnsafePointer' (aka 'UnsafePointer<()>') to expected argument type 'UnsafeMutablePointer' (aka 'UnsafeMutablePointer>') error
Chiunque un'idea?
sembra compilare bene! Puoi spiegare come sei arrivato a questa soluzione? Il compilatore desidera: UnsafeMutablePointer> ancora apparentemente AnyObject? va bene? –
Toad
vedere [questo documento] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_16). Possiamo passare l'espressione in-out ('&') al parametro 'UnsafeMutablePointer'. Quando accetta 'UnsafeMutablePointer >', possiamo passare '& result' se' result' è una 'Optional ' a.k.a. 'AnyObject?'. –
rintaro