不符合协议UIPickerViewDataSource

时间:2016-08-29 05:16:00

标签: ios swift uipickerview

我不知道我的编码有什么问题。我试着按照教程,但同样的错误发生。

错误:

  

键入' 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
        }
    }

}

3 个答案:

答案 0 :(得分:23)

替换协议Swift 3方法的弃用版本,如果您使用func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } 可能适合您。

不推荐使用的协议方法

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

Swift 3中的最新协议方法

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

注意:其他所需协议方法也是如此。 即

  

推荐使用:

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

  

最新版本:

url

答案 1 :(得分:4)

因为您所需的委托方法不正确。

替换为:

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

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

您的委托方法返回Int?这是不正确的。

答案 2 :(得分:0)

你必须实现它的功能:

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