我是一个使用Swift的新手,我正在努力做一些应该非常简单的事情.
我有一个对象Place,其变量类型为Double,称为distance.我使用以下代码存储用户位置和其他一些位置之间的距离:
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
Run Code Online (Sandbox Code Playgroud)
最后一行显示错误说"CLLocationDistance不能转换为'Double'".据我所知,CLLocationDistance应该是Double.我试图将该值转换为double并浮动使用
Double(dist)
Run Code Online (Sandbox Code Playgroud)
和
obj.distance = dist as Double
Run Code Online (Sandbox Code Playgroud)
但似乎没什么用.我将不胜感激任何帮助.
发生这种情况的原因归结为以下几行:
let distance = CLLocation.distanceFromLocation(loc)
Run Code Online (Sandbox Code Playgroud)
这不是你认为它正在做的事情.distanceFromLocation是一个实例方法,但您将其称为类方法.与ObjC不同,Swift允许这样做,但你实际上得到的不是一个CLLocationDistance具有以下类型签名的函数:CLLocation -> CLLocationDistance.您可以通过自己添加类型注释来验证这一点:
let distance: CLLocation -> CLLocationDistance = CLLocation.distanceFromLocation(loc)
Run Code Online (Sandbox Code Playgroud)
这被称为部分应用程序,并且超出了我的答案的范围,除了要注意分配给的函数的第一个参数在被调用为实例方法时distance将是隐式的self.
修复很简单:
let distance = loc.distanceFromLocation(loc)
Run Code Online (Sandbox Code Playgroud)
然后一切都会按照您的意愿工作,至少从类型系统的角度来看,因为这正确地返回了一个CLLocationDistance可替代的东西Double.
| 归档时间: |
|
| 查看次数: |
5438 次 |
| 最近记录: |