viewController 不符合协议 UIPickerViewDataSource 我的代码有什么问题?
viewController does not conform to protocol UIPickerViewDataSource what is wrong with my code?
我查看了很多问题和答案,但找不到我的应用程序一直失败的原因。很抱歉给您带来不便,但有人可以帮助我吗?我正在使用 swift 3.
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate, UIPickerViewDelegate, UIPickerViewDataSource {
//Distance
@IBOutlet weak var setDistance: UIPickerView!
var distance = ["1/2 Mile", "1 Mile", "2 Miles", "5 Miles"]
//Map
@IBOutlet weak var map: MKMapView!
let manager = CLLocationManager()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
print(location.altitude)
print(location.speed)
self.map.showsUserLocation = true
}
override func viewDidLoad()
{
super.viewDidLoad()
//Distance Stuff
setDistance.delegate = self
setDistance.dataSource = self
}
func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func setDistance(_ setDistance: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func setDistance(_ setDistance: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
return distance[row]
}
//Map Stuff
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
你应该像 below.the 问题那样实现委托,你包括 UIPickerViewDataSource 但没有实现他们的 datasource
import UIKit
import MapKit
import CoreLocation
class TestViewController: UIViewController, CLLocationManagerDelegate, UIPickerViewDelegate, UIPickerViewDataSource {
//Distance
@IBOutlet weak var setDistance: UIPickerView!
var distance = ["1/2 Mile", "1 Mile", "2 Miles", "5 Miles"]
//Map
@IBOutlet weak var map: MKMapView!
let manager = CLLocationManager()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
print(location.altitude)
print(location.speed)
self.map.showsUserLocation = true
}
override func viewDidLoad()
{
super.viewDidLoad()
//Distance Stuff
setDistance.delegate = self
setDistance.dataSource = self
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
/* func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func setDistance(_ setDistance: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func setDistance(_ setDistance: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
return distance[row]
}
*/
func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return distance[row]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
由于 Xcode 无法实现或建议所需的功能,我发现识别它们的最佳方法是使用文档和 API 参考。
您可以显示有关协议的快速帮助(Option + 单击),然后单击协议参考:
这将打开文档和 API 参考,它告诉您有关所需功能的更多信息:
您还可以搜索所需的关键工作 (CMD + F) 并在搜索字段中键入所需内容。
然后你可以在你的 class:
中实现它们
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataset.count
}
Xcode 帮助您找到相关函数,例如,开始输入 pickerview
它会向您推荐协议函数列表:
就是这样。
我查看了很多问题和答案,但找不到我的应用程序一直失败的原因。很抱歉给您带来不便,但有人可以帮助我吗?我正在使用 swift 3.
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, CLLocationManagerDelegate, UIPickerViewDelegate, UIPickerViewDataSource {
//Distance
@IBOutlet weak var setDistance: UIPickerView!
var distance = ["1/2 Mile", "1 Mile", "2 Miles", "5 Miles"]
//Map
@IBOutlet weak var map: MKMapView!
let manager = CLLocationManager()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
print(location.altitude)
print(location.speed)
self.map.showsUserLocation = true
}
override func viewDidLoad()
{
super.viewDidLoad()
//Distance Stuff
setDistance.delegate = self
setDistance.dataSource = self
}
func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func setDistance(_ setDistance: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func setDistance(_ setDistance: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
return distance[row]
}
//Map Stuff
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
你应该像 below.the 问题那样实现委托,你包括 UIPickerViewDataSource 但没有实现他们的 datasource
import UIKit
import MapKit
import CoreLocation
class TestViewController: UIViewController, CLLocationManagerDelegate, UIPickerViewDelegate, UIPickerViewDataSource {
//Distance
@IBOutlet weak var setDistance: UIPickerView!
var distance = ["1/2 Mile", "1 Mile", "2 Miles", "5 Miles"]
//Map
@IBOutlet weak var map: MKMapView!
let manager = CLLocationManager()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
map.setRegion(region, animated: true)
print(location.altitude)
print(location.speed)
self.map.showsUserLocation = true
}
override func viewDidLoad()
{
super.viewDidLoad()
//Distance Stuff
setDistance.delegate = self
setDistance.dataSource = self
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
/* func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func setDistance(_ setDistance: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func setDistance(_ setDistance: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String {
return distance[row]
}
*/
func numberOfComponents(in: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return distance.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return distance[row]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
由于 Xcode 无法实现或建议所需的功能,我发现识别它们的最佳方法是使用文档和 API 参考。
您可以显示有关协议的快速帮助(Option + 单击),然后单击协议参考:
这将打开文档和 API 参考,它告诉您有关所需功能的更多信息:
您还可以搜索所需的关键工作 (CMD + F) 并在搜索字段中键入所需内容。
然后你可以在你的 class:
中实现它们func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return dataset.count
}
Xcode 帮助您找到相关函数,例如,开始输入 pickerview
它会向您推荐协议函数列表:
就是这样。