Im Rahmen einer Implementierung Swift basierten PKI, portierte ich die SecKeyWrapper.m zu SwiftFehler beim Konvertieren von AnyObject? zu SecKeyRef? in Swift
Sowohl (Objective-C und Swift) der Schlüsselzugriffsmethoden arbeitet gut mit einer Ausnahme an der Swift-Implementierung.
Ich erhalte den öffentlichen Schlüssel vom Peer im Base64-Format. Es ist zu NSData umgewandelt und dann im Schlüsselbund gespeichert werden:
statusCode = SecItemAdd(queryDictionary, &persistentPeer)
Nach einer erfolgreich verlaufenen Peer öffentlichen Schlüssel im Schlüsselbund speichern, muss ich es als SecKeyRef bekommen.
Das Problem ist, dass SecItemCopyMatching ein Objekt vom Typ AnyObject zurückgibt? zu SecKeyRef gegossen werden (oder SecKey das ist ein Alias) als kann nicht
let key = peerKeyRef as? SecKeyRef // Compile error.
Die Arbeit rund um Ich fand ist die peerKeyRef als NSObject zu werfen? und dann Objective-C verwenden, um SecKey zu überbrücken, wie folgt:
let keyObject = peerKeyRef as? NSObject
keyRef = Utility.getSecKeyRefFromAnyObject(keyObject).takeRetainedValue()
Der Objetive-C-Code zu tun, es ist wie folgt:
+(SecKeyRef) getSecKeyRefFromNSObject:(id)theObject {
return (__bridge SecKeyRef)theObject;
}
Das Casting zu SecKey diese Abhilfe verwenden funktioniert gut (kein Warnungen oder Fehler) mit dem erwarteten Ergebnis.
Was fehlt Ihrer Meinung nach im Swift-Code, um AnyObject zu übertragen? zu SecKeyRef?
ich mit Xcode arbeite 7.3.1 und Swift 2.2
Rgds ....
Hallo @ OOper.let Schlüssel = PeerKeyRef as! SecKeyRef? – eharo2
Sorry ... unvollständiger Kommentar ... Thx @OOper ... Es funktioniert. Aus irgendeinem Grund "PeerKeyRef als? SecKeyRef" fehlschlägt, aber "PeerKeyRef als! SecKeyRef?" funktioniert gut ..... Thx eine Menge ..... – eharo2
@ eharo2, bitte mach dir keine Sorgen, meiner Meinung nach, 'wie?' sollte funktionieren, wo 'wie!' ist gültig. Aber "aus irgendeinem Grund" funktioniert es nicht. Ich habe nicht mit dem neuesten Xcode 8 (Beta 4, wie für jetzt) überprüft, aber wenn Sie das gleiche Verhalten in der neuesten Xcode 8 finden, sollten Sie einen [Bug Report] senden (http://developer.apple.com/bug-mapping /) an Apple. – OOPer