首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不符合UIPickerViewDataSource协议

不符合UIPickerViewDataSource协议
EN

Stack Overflow用户
提问于 2016-08-29 05:15:59
回答 3查看 11.5K关注 0票数 12

我不知道我的密码有什么问题。我试着遵循这个教程,但是同样的错误也会发生。

错误:

类型'FourthViewController‘不符合协议'UIPickerViewDataSource’

这是我的代码:

代码语言:javascript
复制
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
        }
    }

}
EN

回答 3

Stack Overflow用户

发布于 2016-12-27 08:23:08

如果您使用的是UIPickerViewDataSource,则可以替换协议Swift 3的不推荐版本。

协议不推荐的方法

代码语言:javascript
复制
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

Swift 3 3协议的最新方法

代码语言:javascript
复制
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

注意:对于其他所需的协议方法,也是相同的。i.e

被反对的:

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

最新版本:

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

票数 25
EN

Stack Overflow用户

发布于 2016-08-29 05:19:03

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

代之以:

代码语言:javascript
复制
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

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

委托方法返回不正确的Int?

票数 4
EN

Stack Overflow用户

发布于 2016-08-29 05:19:24

您必须实现它的功能:

代码语言:javascript
复制
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int 
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39198893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档