swift - 使用委托方法的返回值来设置变量

时间:2017-01-19 02:43:25

标签: ios swift xcode

为了让您对我想要完成的内容有一个基本的了解,我希望有一个地图可以放大到用户的当前位置,然后在缩放级别跟随用户。

在view_did_load中我有:

    let span = MKCoordinateSpanMake(0.075, 0.075)
    let region = MKCoordinateRegion(center: CLLocationCoordinate2D(latitude: currentLat, longitude: currentLong), span: span)
    map.setRegion(region, animated: true)

下面我有我的位置经理的委托功能:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) -> (lat: CLLocationDegrees, long: CLLocationDegrees) {
    let userLocation:CLLocation = locations[0]
    let currentLong = userLocation.coordinate.longitude
    let currentLat = userLocation.coordinate.latitude
    return (currentLat, currentLong)
}

是否可以使用此委托方法的返回值来设置我声明区域变量的纬度和经度?目前,当我尝试这个时,它表示“初始化之前使用的常量'currentLat'和初始化之前使用的常量'currentLong'。”我的方法可能与解决方案完全不同,但感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

没有;如果通过添加返回来更改函数的类型,则LocationManager将不会调用已更改的函数,更不用说使用其返回值。如果方法签名与您的函数不完全匹配,则无论其名称是什么,都不会实现CLLocationManagerDelegate协议。

相反,你应该简单地在didUpdateLocations函数中更新你的MapView,如果这是你的viewController的一部分,或者,如果你有一个包装CoreLocationManager的单例,发布一个通知并让你的地图ViewController监听通知并更新你的mapView收到通知时。