我正在尝试在Swift中获得GPS速度。我已经设置好所有内容,现在正在尝试进行一些计算。我想将MS“字符串”转换为KMH。因此,我试图将类型转换为long类型,但无法使其正常工作。
我已经试过了:
var ms: long?
ms = LocationManager.location.speed
但是我得到“ CLLocationspeed不能转换为long”
我是iOS编程和Swift的新手,所以我不知道如何解决此问题。
您应该首先阅读《雨燕书》,但是:
long
在Swift中不是标准类型(不确定在哪里可以找到一个:)。可以使用一个合适的整数类型Int
(除非确切的大小对您很重要,但可能不重要)。但是CoreLocation中的CLLocationSpeed是一种类型别名Double
,您可能应该坚持使用它来进行速度计算。
在Swift中,类型之间的大多数转换不会隐式发生。如果您确实希望将aDouble
变成an Int
,则需要对其进行显式转换let ms = Int(LocationManager.location.speed)
。
当您来自类似C的语言时,这感觉很痛苦。但是背后有充分的理由。例如,当您将浮点数的小数部分分配给整数类型时,应该怎么办?您可能忘记了函数正在返回浮点数并且不小心引入了截断错误吗?
为了弥补这一点,Swift还提供了类型推断。因此,除非您想显式控制类型,否则甚至不必给它们:
// type of ms is automatically inferred to be CLLocationSpeed (alias for Double)
let ms = LocationManager.location.speed
// 3.6 floating-point literal is automatically converted to appropriate type
// type and kph is automatically a Double
let kph = ms * 3.6
大多数时候,您不需要指定类型,只需将其从上下文中推断出来即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句