<分区>
我正在尝试学习如何将位置编程到应用程序中,而这整段代码让我对 locationManager 和委托(delegate)感到困惑。当您声明一个名为 locationManager 的函数时,我完全不明白发生了什么。你正在定义这个功能,locationManager,对吧?有2个参数。那么究竟是什么调用了这个locationManager?通过 Complete iOS Developer Course 时,他获取了这个 locationManager 片段并复制粘贴它,而没有解释复制和粘贴它时你在做什么背后的原理。是否有某行代码调用“locationManager(...)”?如果是这样,这是在哪里发生的?我的大脑一直在想,如果它是一个从父类(super class) CLLocationManagerDelegate 继承的函数,您是否必须重写它才能使其工作?您能否就委托(delegate)的具体工作方式给出一些直觉?
class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {
@IBOutlet var myMap : MKMapView!
var manager:CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Core Location
manager = CLLocationManager()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyBest
manager.requestWhenInUseAuthorization()
manager.startUpdatingLocation()
}
func locationManager(manager:CLLocationManager, didUpdateLocations locations:[AnyObject]) {
var userLocation:CLLocation = locations[0] as CLLocation
var latitude:CLLocationDegrees = userLocation.coordinate.latitude
var longitude:CLLocationDegrees = userLocation.coordinate.longitude
var latDelta:CLLocationDegrees = 0.01
var lonDelta:CLLocationDegrees = 0.01
var span:MKCoordinateSpan = MKCoordinateSpanMake(latDelta, lonDelta)
var location:CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
var region:MKCoordinateRegion = MKCoordinateRegionMake(location, span)
myMap.setRegion(region, animated: true)
}
func locationManager(manager:CLLocationManager, didFailWithError error:NSError)
{
println(error)
}
非常感谢您的帮助!
最佳答案
这些委托(delegate)方法,定义在 CLLocationManagerDelegate
中协议(protocol),由您实例化并在 manager
变量中引用的 CLLocationManager
对象调用。因此,您已经实例化了 CLLocationManager
对象,您已要求它在有位置更新时通知您,它通过调用您已实现的这些委托(delegate)方法来实现这一点。
你说:
My brain keeps thinking that if it's a function that's inherited from a superclass,
CLLocationManagerDelegate
, wouldn't you have to override it in order to get it to work?
CLLocationManagerDelegate
不是一个类。这是一个“协议(protocol)”。它定义了委托(delegate)对象(在本例中为您的 View Controller )可以/应该实现哪些功能。所以,没有什么可以覆盖的。
关于ios - 委托(delegate)方法如何在 Swift 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27682805/