39

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

import UIKit

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

Type "myViewController" does not conform to protocol UIPIckerDataSourceUIPickerViewDataSourceについて述べています。

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

コンパイル時エラーのスクリーンショット

4

5 に答える 5

55

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

プロトコルに関しては、Swift は Java に似ています。プロトコルによって宣言されたすべての必要なメソッドを実装しないと、実行時例外ではなくコンパイル時エラーが発生するためです。

于 2014-07-26T12:27:59.923 に答える
15

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
}
于 2016-12-07T00:04:57.747 に答える
11

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

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

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

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

   func pickerView(_ pickerView: UIPickerView!,
numberOfRowsInComponent component: Int) -> Int{}
于 2014-07-26T12:33:52.603 に答える
0

私の問題は、Swift がプロトコルメソッドの実装をオーバーライド (同じoverride)と見なさない実装関数の前にあったことでした。キーワードを取り出すだけで問題が解決しました。override

于 2015-07-28T21:17:47.310 に答える
0

私の問題は、プロトコルのメソッド名が不正であることです。

@protocol ContactsSelectDelegate <NSObject>

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

@end

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

于 2016-04-26T17:45:23.093 に答える