我正试图在Swift中获得GPS速度。我已经把一切都搞定了,现在我正在尝试做一些计算。我想将MS“字符串”转换为KMH。所以我试图将类型转换为long,但我无法让它工作。
我试过这个:
var ms: long?
ms = LocationManager.location.speed
但我得到“CLLocationspeed不能转换为长”
我是iOS编程和Swift的新手,所以我不知道如何解决这个问题。
答案 0 :(得分:5)
您应该首先阅读Swift Book,但是:
long
不是Swift中的标准类型(不知道你在哪里找到了:)。要使用的适当整数类型为Int
(除非确切的大小对您很重要 - 但它可能不重要)。但是CoreLocation中的CLLocationSpeed是Double
的类型,你可能应该坚持使用它进行速度计算。
在Swift中,类型之间的大多数转换都不会隐式发生。如果您真的希望Double
成为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
大多数情况下,您不需要提供类型,只需将其从上下文中推断即可。
答案 1 :(得分:0)
Swift没有长数据类型。
CLLocationSpeed只是Swift中Double的一个类型
因此,如果您想将其转换为Double,请执行此操作
var ms = Double(LocationManager.location.speed)
Swift编译器将自动计算变量的类型
然后你可以用Int,Float或任何其他Swift数据类型替换Double(value) 对该值进行类型转换。