Adressbuch Extern Rückruf in Swift ändern (mit C-Funktionszeigern?)

9

Ursprüngliche Frage (siehe folgende Lösung):

Ich versuche, das AddressBook.framework in meiner Swift App zu verwenden, kann aber nicht herausfinden, wie die Funktion ABAddressBookRegisterExternalChangeCallback implementiert wird.

In Objective-C implementiere ich den Callback einfach als C-Funktion und gebe den Zeiger:

%Vor%

In Swift ist es sehr schwierig für mich, mit C-Funktionen umzugehen. Ich habe festgestellt, dass Apple die Fähigkeit hinzugefügt hat, C-Funktionszeiger in der Beta 3 zu übergeben, aber wie deklariere ich eine solche Funktion? Es wäre gut, Swifts Verschlusssyntax zu verwenden, aber ist das hier überhaupt möglich?

Hier erstelle ich ABAddressBookRef :

%Vor%

Wie kann ich das in Swift umsetzen?

Lösung (mit Fehlern):

Wie von pNre vorgeschlagen, habe ich es jetzt implementiert:

In Ziel-C:

AddressBookExternalChangeCallback.h:

%Vor%

AddressBookExternalChangeCallback.m:

%Vor%

In Swift:

nach dem Import des Bridging-Headers:

%Vor%

Wenn das Adressbuch geändert wird, wird eine Benachrichtigung gesendet. Nur @objc -Klassen können sich jedoch für Benachrichtigungen registrieren. Gibt es also eine Möglichkeit, stattdessen eine Swift-Funktion oder -Methode aufzurufen?

    
knl 17.08.2014, 05:31
quelle

3 Antworten

4

ABExternalChangeCallback ist definiert als

%Vor%

Aus den Xcode-Versionshinweisen:

  

Sie können jedoch keinen C-Funktionszeiger ( CFunctionPointer ) oder aufrufen   wandle eine Schließung in den C-Funktions-Zeigertyp um.

Dies bedeutet, dass Sie einen Block nicht so zuweisen können, wie Sie es tun. Sie können diese Einschränkung jedoch umgehen, indem Sie ABAddressBookRegisterExternalChangeCallback in einer objc-Funktion aufrufen und sie über Ihren Swift-Code aufrufen.

    
pNre 17.08.2014, 15:39
quelle
0

Swift 2.0

%Vor%     
ethanchli 11.03.2016 15:32
quelle
-2

Ich habe das gleiche Problem. Aber ich habe den Cache gelöscht, indem ich ABAddressBookRevert () im Adressbuchobjekt aufgerufen habe.

    
Rakesh Kumar Ingle 25.08.2015 10:46
quelle

Tags und Links