Не соответствует протоколу 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
}
}
}
Ответы
Ответ 1
Замена устаревшей версии метода протокола UIPickerViewDataSource
, если вы используете Swift 3
, может работать для вас.
Устаревший метод протокола
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
Последний метод протокола в Swift 3
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
Примечание: То же самое верно для других необходимых методов протокола.
iee
Устаревшие:
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int
Последняя версия:
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
Ответ 2
Поскольку ваш требуемый метод делегата неверен.
Замените это следующим образом:
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return characters.count
} else {
return weapons.count
}
}
Ваш метод делегата возвращает Int?
, что неверно.
Ответ 3
Вы должны реализовать эту функцию:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int