2015-11-17 32 views
5

Sto cercando di implementare questo metodo protocollo facoltativo da Objective-C in rapida:Implementare protocollo ObjectiveC in rapida

- (void)customHTTPProtocol:(CustomHTTPProtocol *)protocol logWithFormat: 
(NSString *)format arguments:(va_list)arguments; 

(cfr: https://developer.apple.com/library/ios/samplecode/CustomHTTPProtocol/Introduction/Intro.html) Ho scritto questo metodo in rapida:

func customHTTPProtocol(`protocol`: CustomHTTPProtocol!, logWithFormat format: String!, arguments: CVaListPointer) { 
} 

si lamenta che non può soddisfare il requisito facoltativo e suggerisce di aggiungere un @objc prima del metodo, ma se aggiungo @objc dà un errore (CVaListPointer non può essere rappresentato in Objective-C)

Il problema è che questo test non riesce:

if ([strongDelegate respondsToSelector:@selector(customHTTPProtocol:logWithFormat:arguments:)]) { 

e il metodo rapido non è chiamato

risposta

0

Se si desidera utilizzare Objective-C @protocol in classe rapida allora dovete importare classe Objective-C nel vostro File Bridging-Header creato da XCode quando si utilizza il file obiettivo-c nel progetto rapido. Quindi ovviamente devi aggiungere il delegato nel file swift dove devi usarlo come.

class classname : baseClass<yourDelegate> { 

} 

In questo file prima devi aggiungere tutti i metodi delegato richiesti e quindi aggiungere il metodo opzionale è necessario utilizzare. Se non si aggiunge il metodo delegato richiesto, viene visualizzato un errore.

Tuttavia, se si desidera utilizzare da veloci a Objective-C, allora si deve aggiungere @objc prima nome e l'importazione rapida di file per file di Objective-C, è stato anche aggiungere @objc prima classe come questa,

@objc protocol DelegateName { 
    //declare your required and optional delegate method here 
} 

@objc classname : baseClass<yourDelegate> { 

} 

e quindi importare la classe rapido nel file Objective-C come questo,

#import <PROJ_NAME/PROJ_DIR-Swift.h> 

E la cosa importante da aggiungere:

classObj.delegate = self 
+0

Questo è stato già fatto, ho un altro problema, perché il metodo di protocollo è opzionale e (va_list) è forse tradotto male – atrebbi

Problemi correlati