首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Swift铸造CLLocationDistance

用Swift铸造CLLocationDistance
EN

Stack Overflow用户
提问于 2015-01-03 05:06:12
回答 2查看 6.3K关注 0票数 3

我是一个使用Swift的新手,而且我很头疼,想做一些应该很简单的事情。

我有一个对象位置,它的变量为Double,称为called。我使用以下代码存储用户位置与其他位置之间的距离:

代码语言:javascript
复制
var obj = res as Place
let loc = CLLocation(latitude: obj.location.lat, longitude: obj.location.lng)
let dist = CLLocation.distanceFromLocation(loc)
obj.distance = dist // ERROR 

最后一行显示了一个错误:"CLLocationDistance不可转换为'Double'“。据我所知,CLLocationDistance应该是双倍的。我尝试将该值转换为双倍并使用

代码语言:javascript
复制
Double(dist)

代码语言:javascript
复制
obj.distance = dist as Double

但似乎什么都起不到作用。我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-03 05:51:40

发生这种情况的原因归结为以下几行:

代码语言:javascript
复制
let distance = CLLocation.distanceFromLocation(loc)

这不是在做你想做的事。distanceFromLocation是一个实例方法,但是您将它作为一个类方法调用。与ObjC不同,Swift允许这样做,但实际上您得到的不是一个CLLocationDistance,而是一个具有以下类型签名的函数:CLLocation -> CLLocationDistance。您可以通过自己添加类型注释来验证这一点:

代码语言:javascript
复制
let distance: CLLocation -> CLLocationDistance = CLLocation.distanceFromLocation(loc)

这称为部分应用程序,不在我的回答范围之内,除非注意到分配给distance的函数的第一个参数是作为实例方法调用时的隐式self

修复方法很简单:

代码语言:javascript
复制
let distance = loc.distanceFromLocation(loc)

然后一切都会按照您的意愿工作,至少从类型系统的角度来看是这样的,因为这正确地返回了一个CLLocationDistance,它可以替代Double

票数 8
EN

Stack Overflow用户

发布于 2015-01-03 05:20:01

您需要两个具有两个不同位置的CLLocation对象

比如fromLocationtoLocation

然后你就能得到距离

代码语言:javascript
复制
let distance = fromLocation.distanceFromLocation(toLocation)

新旧位置距离代码示例:

代码语言:javascript
复制
func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if let firstLocation = locations.first as? CLLocation
    {
        mapView.setCenterCoordinate(firstLocation.coordinate, animated: true)

        let region = MKCoordinateRegionMakeWithDistance(firstLocation.coordinate, 1000, 1000)
        mapView.setRegion(region, animated: true)

        if let oldLocation = oldLocation {
            let delta: CLLocationDistance = firstLocation.distanceFromLocation(oldLocation)
            totalDistane += delta
            updateDistanceLabel()
        }

        oldLocation = firstLocation
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27751924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档