Swift - Überprüfung der Einzelwerteigenschaft des nicht verwalteten Adressbuchs auf nil

Ich bin relativ neu in der iOS-Entwicklung und schnell. Aber bis zu diesem Punkt konnte ich mich immer durch Recherchen zum Stackoverflow und durch verschiedene Dokumentationen und Tutorials unterstützen. Es gibt jedoch ein Problem, für das ich noch keine Lösung gefunden habe.

Ich möchte einige Daten aus dem Adressbuch des Benutzers erhalten (zum Beispiel die EinzelwerteigenschaftkABPersonFirstNameProperty). Weil der.takeRetainedValue()ie @ -Funktion gibt einen Fehler aus, wenn dieser Kontakt keinen FirstName-Wert im Adressbuch hat. Ich muss sicherstellen, dass dasABRecordCopyValue() -Funktion gibt einen Wert zurück. Ich habe versucht, dies in einer Schließung zu überprüfen:

let contactFirstName: String = {
   if (ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty) != nil) {
      return ABRecordCopyValue(self.contactReference, kABPersonFirstNameProperty).takeRetainedValue() as String
   } else {
      return ""
   }
}()

contactReference ist eine Variable vom TypABRecordRef!

Wenn ein Adressbuchkontakt einen FirstName-Wert bereitstellt, funktioniert alles einwandfrei. Wenn es jedoch keinen Vornamen gibt, stürzt die Anwendung durch das @ a.takeRetainedValue() Funktion. Es scheint, dass die if-Anweisung nicht hilft, weil der nicht verwaltete Rückgabewert desABRecordCopyValue()ie @ -Funktion ist nicht gleich Null, obwohl es keinen Vornamen gibt.

Ich hoffe, ich konnte mein Problem klarstellen. Es wäre großartig, wenn mir jemand mit einer Gehirnwelle helfen könnte.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage