Type ‘ViewController’ does not conform to protocol ‘UITableViewDataSource’のコンパイルエラーで必要なメソッドを入れたも関わらず改善されないとき
佐伯です。
UIPickerViewのコンパイルエラーの直し方のメモです
UITableViewDataSourceに必要なメソッドをコードに書いていても下のコンパイルエラーが出るときがあります。
Type "myViewController" does not conform to protocol UIPIckerDataSource
import UIKit
class myViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var myUIPicker: UIPickerView!
var array = ["hoge1","hoge2","hoge3"]
override func viewDidLoad() {
super.viewDidLoad()
self.myUIPicker.delegate = self
self.myUIPicker.datasource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
//datasourceに必要なメソッド
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array.count
}
}
これは、必要なメソッドを書いていないよ、というエラーなのですね。
いや....
書いてるし?????
Xcodeさん目ン玉無いんすか????
ということですごく激情困惑していたのですが、下記リンクに答えが書いてありました。
Swift3から非推奨の書き方みたいです。
以下で通りました。
import UIKit
class myViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var myUIPicker: UIPickerView!
var array = ["hoge1","hoge2","hoge3"]
override func viewDidLoad() {
super.viewDidLoad()
self.myUIPicker.delegate = self
self.myUIPicker.datasource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
//datasourceに必要なメソッド(ココを修正!)
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array.count
}
}
うまくいくはずなのに通らないときは、非推奨じゃないか疑おうと思いました。