Swift3 PickerView:Type';ViewController';不符合协议';UIPickerViewDataSource';

Swift3 PickerView:Type';ViewController';不符合协议';UIPickerViewDataSource';,swift3,xcode8,Swift3,Xcode8,我使用的代码来自一个示例项目。它在示例项目中有效,但在我的项目中无效 设置查看控制器。swift: import UIKit class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { let days:[String] = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

我使用的代码来自一个示例项目。它在示例项目中有效,但在我的项目中无效

设置查看控制器。swift:

import UIKit

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    let days:[String] = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return days.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return days[row]
    }

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


}

我使用的是Xcode 8.2.1,Swift 2.3,numberOfComponents(in:)的方法签名从iOS 9.3更改为iOS 10。由于您的目标是传统版本的Swift,请将当前的
numberOfComponents(in:)
实现替换为下面的相应版本

Swift 2.3

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

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

API的变化可以在这里看到:

修改的UIPickerViewDataSource

声明


您问题中显示的代码似乎很好。有几件小事,您不需要在
days
数组中指定类型,声明后不需要分号。除此之外,我无法在Xcode 8.2.1.Thx上为响应重现编译时错误。似乎我在另一个项目中使用了Swift 2.3(使用遗留的Swift语言版本=是)。这个问题类似,尽管与您的需要相反。(Swift 2.3至Swift 3)。