我正在学习Swift,在下面的代码段中有一个len
方法。即使没有在Locate me按钮的动作代码中调用它,我为什么要写这个呢?
locationManager
答案 0 :(得分:1)
有问题的代码是:
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
我意识到你现在正在学习Swift,所以拥有你不称之为自己的代码可能会很奇怪。但在此示例中,代码由iOS调用。
你看,当你写manager.startUpdatingLocation()
时,它会产生iOS想要在用户位置发生变化时开始告诉你的效果。它是通过查看您是否拥有上面的didUpdateLocations
方法来实现的。如果您的代码中有这种方法,iOS会为您调用它 - 它不是您自己称之为的。
答案 1 :(得分:0)
它被称为委托。
您正在实施CLLocationManagerDelegate
。
由于您使用此代码manager
将manager.delegate = self
委托设置为视图控制器,因此它会在特定条件下自动调用委托事件。
在您的代码中,如果您的位置已更新,视图控制器将自动运行此功能func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
答案 2 :(得分:0)
在您的函数LocateMe(sender :)中,您正在调用if ($window.width() < 768) {}
这告诉manager.startUpdatingLocation()
开始寻找您的(我猜)gps坐标。但是,现在每次更新您的位置时,CLLocationManager
都会调用函数CLLocationManager
。
这是因为更新是异步的,一旦您的位置更新,您就会收到此功能的通知。
答案 3 :(得分:0)
在LocateMe
方法中,您将locationManager的delegate
设置为控制器。
当位置发生变化时,会调用func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
方法。
答案 4 :(得分:0)
我认为您必须在.plist中添加NSLocationWhenInUseUsageDescription,然后设置位置并尝试此操作