2015-11-17 8 views
5
迅速

でobjectivecプロトコルを実装します。私は迅速にこの方法を書かれている : は私が迅速でのObjective-Cからこのオプションのプロトコルメソッドを実装しようとしている

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

https://developer.apple.com/library/ios/samplecode/CustomHTTPProtocol/Introduction/Intro.html CFR):

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

これはオプションの要件を満たすことができず、@objcをメソッドの前に追加することを提案しますが、@objcを追加するとエラーが発生します(Objective-CではCVaListPointerを表現できません)

問題は、このテストが失敗したということです:あなたが迅速クラスにObjective-Cの@protocolを使用する場合は、あなたがあなたにインポートObjective-Cのクラスを持っている

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

かつ迅速な方法が

答えて

0

と呼ばれていませんブリッジング - 迅速なプロジェクトでobjective-cファイルを使用するときにXCodeによって作成されるヘッダーファイル。そして、明らかに、デリゲートを素早くファイルに追加する必要があります。

class classname : baseClass<yourDelegate> { 

} 

このファイルでは、まず、必要なデリゲートメソッドをすべて追加してから、使用するオプションのメソッドを追加する必要があります。必要なデリゲートメソッドを追加しないと、エラーが発生します。

しかしあなたは、あなたが名の前に@objc追加するとObjective-Cのファイルへの迅速なファイルをインポートする必要がObjective-Cのに迅速からを使用したい場合、あなたはまた、

このようなクラスの前に@objc追加しています
@objc protocol DelegateName { 
    //declare your required and optional delegate method here 
} 

@objc classname : baseClass<yourDelegate> { 

} 

そして、このようなあなたのObjective-Cのファイルにあなたの迅速なクラスをインポートし、

#import <PROJ_NAME/PROJ_DIR-Swift.h> 

そして重要なことは、追加します。

classObj.delegate = self 
+0

これは既に行われていましたが、プロトコルメソッドがオプションで(va_list)誤って翻訳されている可能性があるため、別の問題があります – atrebbi

関連する問題