什么在我的Swift代码中调用didUpdateLocations?

时间:2015-12-15 12:35:22

标签: ios iphone swift swift2

我正在学习Swift,在下面的代码段中有一个len方法。即使没有在Locate me按钮的动作代码中调用它,我为什么要写这个呢?

locationManager

5 个答案:

答案 0 :(得分:1)

有问题的代码是:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

我意识到你现在正在学习Swift,所以拥有你不称之为自己的代码可能会很奇怪。但在此示例中,代码由iOS调用。

你看,当你写manager.startUpdatingLocation()时,它会产生iOS想要在用户位置发生变化时开始告诉你的效果。它是通过查看您是否拥有上面的didUpdateLocations方法来实现的。如果您的代码中有这种方法,iOS会为您调用它 - 它不是您自己称之为的。

答案 1 :(得分:0)

它被称为委托。

您正在实施CLLocationManagerDelegate

由于您使用此代码managermanager.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]) 方法。

有关详细信息,请查看: https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManagerDelegate_Protocol/#//apple_ref/occ/intfm/CLLocationManagerDelegate/locationManager:didUpdateLocations

答案 4 :(得分:0)

我认为您必须在.plist中添加NSLocationWhenInUseUsageDescription,然后设置位置并尝试此操作