2016-04-18 4 views
1

Objective-Cで書かれたMLPAutoCompleteTextFieldライブラリを使用するSwift iOSプロジェクトがあります。ここに私のスウィフトクラスが実装しようとしているMLPAutoCompleteTextFieldDataSourceプロトコルである:ここではObjective-Cプロトコルを実装しようとしているSwiftクラスが、オプションのメソッド競合エラーで失敗しました

@protocol MLPAutoCompleteTextFieldDataSource <NSObject> 
@optional 
- (void)autoCompleteTextField:(MLPAutoCompleteTextField *)textField 
    possibleCompletionsForString:(NSString *)string 
      completionHandler:(void(^)(NSArray *suggestions))handler; 


- (NSArray *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField 
    possibleCompletionsForString:(NSString *)string; 

@end 

は私スウィフトクラスです:

class MyAutocompleteDataSource : NSObject, MLPAutoCompleteTextFieldDataSource { 
    override func autoCompleteTextField(textField : MLPAutoCompleteTextField, 
possibleCompletionsForString : String) 
        -> Array<String> { 
     return nil 
    } 
} 

コンパイルした後、これら2つのエラーが報告されています

エラー:(17,23)メソッドは、スーパークラスのメソッドをオーバーライドしません。

エラー:(17、23)のObjective-Cメソッド 'autoCompleteTextField:possibleCompletionsForString:' メソッドによって提供 'autoCompleteTextField(:possibleCompletionsForString :)' オプション要求メソッド 'autoCompleteTextField(:possibleCompletionsForString :)' との競合プロトコルにおける「MLPAutoCompleteTextFieldDataSource '

これを修正する方法だけでなく、SwiftでObj-Cプロトコルを実装するときにさまざまなタイプ(配列、コールバックなど)をマップする方法に関するいくつかの一般的なルールや参照を指摘できれば本当に感謝しています。

答えて

0

プロトコル方法を実施するときに、第2のエラーのスーパー

からメソッドを再実装する場合にのみ上書きがプロトコルにおいて、必要とされない、最初のエラーのためにこの

override func autoCompleteTextField(textField : MLPAutoCompleteTextField, possibleCompletionsForString string : String)

3

を試します、この方法は、

01を与える[ANYOBJECT]ではなく[文字列]

として架橋されたNSArrayを返し

あなたが本当にしている場合シュルだけではなく、あなただけのoverrideキーワードにnilを返すことは、あなたのように動作しないことを

- (NSArray <NSString *> *)autoCompleteTextField:(MLPAutoCompleteTextField *)textField 
    possibleCompletionsForString:(NSString *)string; 

ノートを削除する必要があり、次のようにプロトコルを変更することができ、文字列が含まれていますアレー配列ではなく配列を返します。あなたが本当にnilを返すことを期待すれば、戻り値の型Arrayにnull値を追加する必要がありますか?

短い行が好きな場合は[文字列]で置き換えることができます

関連する問題