web-dev-qa-db-ja.com

プロトコルUIPickerViewDataSourceに準拠していません

コードの何が問題なのかわかりません。チュートリアルに従ってみましたが、同じエラーが発生します。

エラー:

タイプ「FourthViewController」はプロトコル「UIPickerViewDataSource」に準拠していません

これが私のコードです:

import UIKit

let characters = ["Jaja Bink", "Luke", "Han Solo", "Princess Leia"];

let weapons = ["LightSaber", "Pistol", "Keris"];

class FourthViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {

    @IBOutlet weak var doublePicker: UIPickerView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

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


    func pickerView(pickerView: UIPickerView,
                    titleForRow row: Int,
                                forComponent component: Int) -> String? {

        if component == 0 {
            return characters[row]
        } else {
            return weapons[row]
        }

    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int? {
        if component == 0 {
            return characters.count
        } else {
            return weapons.count
        }
    }

}
12
Ayus Salleh

_Swift 3_を使用している場合は、プロトコルUIPickerViewDataSourceの非推奨バージョンのメソッドを置き換えるとうまくいきます。

非推奨のプロトコル方式

_func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}
_

Swift 3)のプロトコルの最新の方法

_func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
_

注:他の必要なプロトコルメソッドについても同様です。つまり

非推奨:

func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int

最近のバージョン:

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int

24
Aamir

必要なデリゲートメソッドが正しくないため。

これに置き換えてください:

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if component == 0 {
        return characters.count
    } else {
        return weapons.count
    }
}

デリゲートメソッドはInt?を返しますが、これは正しくありません。

4
Dharmesh

あなたはそれの機能を実装する必要があります:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
0
Tj3n