我正在尝试创建一个选择器,以便用户可以选择那里的标题(mr / mrs等)但是我一直得到2个错误
1:类型'ViewController'不符合协议'UIPickerViewDataSource'
2:定义与先前值冲突
第一个是在类viewcontoller行(第2行)。第二个错误是在代码末尾的titlepicker函数中 我在网上搜索,无论如何都可以找到修复这些
import UIKit
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource //first error here
{
@IBOutlet weak var titlepicker: UIPickerView!
var titlepickerdata : [String] = [String]()
override func viewDidLoad()
{
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//connect data
self.titlepicker.delegate = self
self.titlepicker.dataSource = self
//input data into the array
titlepickerdata = ["Mr","Ms","Mrs","Miss","Other"]
// The number of columns of data
func numberOfComponentsInPickerView(titlepicker: UIPickerView) -> Int
{
return 1
}
// The number of rows of data
func pickerView(titlepicker: UIPickerView, numberOfRowsInComponent component: Int) -> Int
{
return titlepickerdata.count
}
// The data to return for the row and column that's being passed in
func pickerView(titlepicker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? // second error returned here
{
return titlepickerdata[row]
}
}
override func didReceiveMemoryWarning()
{
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:2)
您已在numberOfComponentsInPickerView
的定义中加入pickerView(_:numberOfRowsInComponent:)
,titlepicker(_:titleForRow:forComponent:)
和didReceiveMemoryWarning
的定义。 Swift支持嵌套函数,因此这是合法的语法。但是,因为它们是在didReceiveMemoryWarning
中定义的,所以这些函数不是实例方法,因此它们不符合UIPickerViewDataSource
协议的要求。
如果正确缩进代码,则更容易看到此类问题。然后这三个函数缩进了一个额外的级别,表明它们嵌套在didReceiveMemoryWarning
中。您可以使用菜单选项Edit&gt;修复整个文件的缩进。选择全部(默认快捷键:⌘A),然后选择菜单选项编辑器&gt; <结构>重新缩进(默认快捷方式: ^ I
)。
此外,在didReceiveMemoryWarning
之外移动定义后,如果您希望将titlepicker(_:titleForRow:forComponent:)
用作pickerView(_:titleForRow:forComponent:)
的一部分,则需要将UIPickerViewDelegate
重命名为didReceiveMemoryWarning
协议
好的,现在你已经从viewDidLoad
中取出了三个函数并将它们放在viewDidLoad
中,出于完全相同的原因这是错误的。这些功能需要与didReceiveMemoryWarning
和 $class = "11";
$classes = array_reverse(array( '1', '2', '4', '5', '6', '7', '8', '9', '10', '11'
));
$replacements = array_reverse(array( 'Warrior', 'Paladin', 'Hunter', 'Rogue',
'Priest', 'Death Knight', 'Shaman', 'Mage', 'Warlock', 'Monk',
'Druid' ));
$resultclass = str_replace( $classes, $replacements, $class );
var_dump($resultclass);
处于同一级别。
答案 1 :(得分:1)
第二个错误是因为,最后三个函数,例如numberOfComponentsInPickerView
错过了didReceiveMemoryWarning
函数。
因此存在第一个错误,因为XCode
无法找到UIPickerViewDataSource