web-dev-qa-db-ja.com

タイプ「myViewController」はSwift=のプロトコルUIPIckerDataSourceに準拠していません

Swiftで新しいクラスを作成するだけです。myViewControllerと呼ばれ、UIViewControllerです。今私はそれをUIPickerViewDelegateとDataSourceにしようとしていますが、iに奇妙なエラーが発生しました

import UIKit

class myViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
   ...
}

Type "myViewController" does not conform to protocol UIPIckerDataSource UIPickerViewDataSourceを介して。

Xcode-Beta 3のバグですか??

Screenshot for compile-time error

39
r4id4

これらのプロトコルに準拠する場合は、UIPickerViewDataSourceおよびUIPickerViewDelegateのすべての必須メソッドを実装する必要があります。

SwiftはJavaプロトコルの場合に似ています)==プロトコルで宣言されたすべての必須メソッドを実装しないと、コンパイル時エラーが発生するためです実行時例外の代わりに。

55
salman140

XCode 8.1のFix-itは、Swift 3:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return componentNumber
}

XCode 10.0+で

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return componentNumber
}
15
offbyone

ドキュメントのようにUIPickerDataSourceの必須メソッドを実装します。

データソースは、ピッカービューデータを表示するために、ピッカービューにコンポーネントの数と各コンポーネントの行数を提供します。 このプロトコルの両方のメソッドが必要です。

したがって、これらのメソッドを実装する必要があります

func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}

   func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
11
codester

私の問題は、実装関数の前にoverrideがあったことでした。ここでSwiftはプロトコルメソッドの実装をオーバーライドと見なしません( same ) 。overrideキーワードを削除するだけで問題が修正されました。

0
amr

私の問題は、プロトコルのメソッド名が違法である、

@protocol ContactsSelectDelegate <NSObject>

- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;

@end

ここに、 Tags:tags:
私の答えがお役に立てば幸いです。

0
DawnSong