不符合协议UIPickerViewDataSource

12

我不知道我的代码哪里出了问题。我尝试按照教程去做,但是仍然出现相同的错误。

错误信息:

类型“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
        }
    }

}

请不要在您的问题中添加“已解决”。如果有答案解决了您的问题,请将该答案标记为已接受;如果您自己解决了问题,也可以发布您自己的答案。谢谢。 - Eric Aya
3个回答

25

如果你正在使用 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


4

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

请使用以下方法替换它:

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

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

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


1
天哪!我突然意识到在我的编码功能 pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 中多了一个问号'?'。现在问题已经解决了。谢谢! - Ayus Salleh
1
如果有任何帮助,请接受任何答案.. :) - Dharmesh Kheni

0

你需要实现它的功能:

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

哦天啊!我突然意识到在我的编码函数 pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 的 int 结尾多了一个问号'?'。现在问题已解决。谢谢! - Ayus Salleh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接