A社の佐伯さんがのらりくらりと

A社の佐伯さんがのらりくらりと。インターネットと少しだけ生活のこと。

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さん目ン玉無いんすか????

 

ということですごく激情困惑していたのですが、下記リンクに答えが書いてありました。

http://www.it1me.com/it-answers?id=24970877&ttl=Type+%26quot%3BmyViewController%26quot%3B+does+not+conform+to+protocol+UIPIckerDataSource+in+Swift

 

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
}

}

 うまくいくはずなのに通らないときは、非推奨じゃないか疑おうと思いました。