Bekommen Wert wie swift Typ von Unmanaged<AnyObject> . Zum Beispiel: ABRecordRef
Wie bekomme ich einen Wert als Swift Typ von einem Objekt des Typs Unmanaged<AnyObject>
. Mein Beispiel ist mit einem ABRecordRef
Ich bin die Schaffung einer Kontakt-Objekt zu verwalten, sobald ich die ABRecordRef
, aber ich habe Probleme beim übersetzen von ObjC. Hier ist, was ich habe:
init(recordRef: ABRecordRef) {
if let firstName = ABRecordCopyValue(recordRef, kABPersonFirstNameProperty) {
self.firstName = firstName
}
}
Wenn es ObjC, die ich tun würde:
CFTypeRef firstNameRef = ABRecordCopyValue(recordRef, kABPersonFirstNameProperty);
if (firstNameRef) {
self.firstName = (__bridge NSString *)firstNameRef;
}
Ich kann nicht scheinen, um herauszufinden, die richtige Kombination von downcasting /- Konvertierung, so dass jede Hilfe wird sehr geschätzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Niemand geantwortet, bevor ich es gelöst, ich füge die Antwort hier:
Wenn man sich die header der
Unmanaged
struct-Typ, finden Sie diese:So, weil die
CFTypeRef
umgewandeltUnmanaged<AnyObject>
im Swift.Unmanaged
nutzt generics, um zu definieren, eine Rückkehr geben, und es wird erklärt wie so:Unser Objekt ist vom Typ
Unmanaged<AnyObject>
was bedeutet, dasstakeRetainedValue()
zurück gebenT
oder in unserem Fall, geben SieAnyObject
. Ich benutze optional downcasting seit meiner EigenschaftfirstName
ist der TypString?
.Können Sie die
takeRetainedValue
Methode, um Ihren Wert aus IhremUnmanaged
Objekt. Im Foundation-API ' s, ich vermute, dass Sie meist vom TypUnmanaged<AnyObject>!
und niedergeschlagen erforderlich. Die generische Formel scheint zu sein:}