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のバグですか??
これらのプロトコルに準拠する場合は、UIPickerViewDataSource
およびUIPickerViewDelegate
のすべての必須メソッドを実装する必要があります。
SwiftはJavaプロトコルの場合に似ています)==プロトコルで宣言されたすべての必須メソッドを実装しないと、コンパイル時エラーが発生するためです実行時例外の代わりに。
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
}
ドキュメントのようにUIPickerDataSource
の必須メソッドを実装します。
データソースは、ピッカービューデータを表示するために、ピッカービューにコンポーネントの数と各コンポーネントの行数を提供します。 このプロトコルの両方のメソッドが必要です。
したがって、これらのメソッドを実装する必要があります
func numberOfComponentsInPickerView(_ pickerView: UIPickerView!) -> Int {}
func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
私の問題は、実装関数の前にoverride
があったことでした。ここでSwiftはプロトコルメソッドの実装をオーバーライドと見なしません( same ) 。override
キーワードを削除するだけで問題が修正されました。
私の問題は、プロトコルのメソッド名が違法である、
@protocol ContactsSelectDelegate <NSObject>
- (void)selectContacts:(NSMutableArray *)contacts Tags:(NSMutableArray *)tags;
@end
ここに、 Tags:
はtags:
。
私の答えがお役に立てば幸いです。