2017-03-06 6 views
0

J'ai une petite quête pour vous. Je veux effectuer un sélecteur qui contient la fonction comme param. Mais toujours obtenir une erreur d'exécution.Impossible d'exécuter le sélecteur avec la fonction comme param

Cette méthode provient du framework iAd. Et ce que je suis en train de faire:

let sel = Selector("requestAttributionDetailsWithBlock:") 
if obj.responds(to: sel) { 
    obj.perform(sel, with: funcAsVar) 
} 

funcAsVar est une fonction comme variable. Aide s'il vous plaît, les gars

erreur d'exécution est: libswiftCore.dylib-[_SwiftValue dealloc]:

+0

Quelle est l'erreur d'exécution? – NobodyNada

+0

Je ne pense pas que les fonctions Swift soient automatiquement reliées aux blocs Objective C. Avez-vous essayé un bloc Swift qui appelle la fonction? –

+1

En fait, vous pourriez utiliser '@convention (block)' sur le paramètre que vous passez à la méthode 'perform'. –

Répondre

1

Vous pouvez ajouter @convention(block) sur le paramètre que vous passez à la méthode perform. Comme ceci:

let sel = Selector("requestAttributionDetailsWithBlock:") 
if obj.responds(to: sel) { 
    obj.perform(sel, with: @convention(block) funcAsVar) 
}