我是一个使用Swift的新手,而且我很头疼,想做一些应该很简单的事情。
我有一个对象位置,它的变量为Double,称为called。我使用以下代码存储用户位置与其他位置之间的距离:
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应该是双倍的。我尝试将该值转换为双倍并使用
Double(dist)和
obj.distance = dist as Double但似乎什么都起不到作用。我很感谢你的帮助。
发布于 2015-01-03 05:51:40
发生这种情况的原因归结为以下几行:
let distance = CLLocation.distanceFromLocation(loc)这不是在做你想做的事。distanceFromLocation是一个实例方法,但是您将它作为一个类方法调用。与ObjC不同,Swift允许这样做,但实际上您得到的不是一个CLLocationDistance,而是一个具有以下类型签名的函数:CLLocation -> CLLocationDistance。您可以通过自己添加类型注释来验证这一点:
let distance: CLLocation -> CLLocationDistance = CLLocation.distanceFromLocation(loc)这称为部分应用程序,不在我的回答范围之内,除非注意到分配给distance的函数的第一个参数是作为实例方法调用时的隐式self。
修复方法很简单:
let distance = loc.distanceFromLocation(loc)然后一切都会按照您的意愿工作,至少从类型系统的角度来看是这样的,因为这正确地返回了一个CLLocationDistance,它可以替代Double。
发布于 2015-01-03 05:20:01
您需要两个具有两个不同位置的CLLocation对象
比如fromLocation和toLocation
然后你就能得到距离
let distance = fromLocation.distanceFromLocation(toLocation)新旧位置距离代码示例:
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
}
}https://stackoverflow.com/questions/27751924
复制相似问题