2014-12-26 2 views
1

Swift에서 GPS 속도를 얻으려고합니다. 나는 모든 것을 설정했고 지금은 계산을하려고합니다. MS "문자열"을 KMH로 변환하고 싶습니다. 그래서 타입을 길게 변환하려고 노력하고 있지만 작동시키지 못합니다.Swift에서 CLLocationSpeed를 long으로 변환

나는이 시도 :

var ms: long? 
ms = LocationManager.location.speed 

을하지만

나는 아이폰 OS 프로그래밍 및 스위프트에 새로 온 사람

그래서이 문제를 해결하는 방법을 모른다 "CLLocationspeed 오래로 변환되지 않습니다"있어요 .

답변

0

스위프트는 긴 데이터 형식이 없습니다.

CLLocationSpeed

는 스위프트

에서 두 번에 불과 typealias입니다 당신이 더블로 변환하려는 경우

그래서,이

var ms = Double(LocationManager.location.speed) 

스위프트 컴파일러는 자동으로 변수

의 유형을 파악합니다 할 그리고 당신은 지능과 더블 (값)를 대체 할 수 있습니다 부동 또는 다른 Swift 데이터 형식 값을 유형 변환합니다.

5

당신은 정말 그러나, Swift Book을 읽는 것부터 시작해야합니다

long는 스위프트의 표준 유형 (하나 :)를 찾기 위해 관리 한 경우 확실하지 없습니다. 사용할 정확한 정수 유형은 Int입니다 (정확한 크기가 중요하지 않은 경우 -하지만 그렇지 않은 경우). 그러나 CoreLocation의 CLLocationSpeed는 Double의 타원체이며 속도 계산을 위해이를 고수해야합니다.

스위프트에서 유형 간의 대부분의 변환은 암시 적으로 발생하지 않습니다. DoubleInt이되도록하려면 명시 적으로 변환해야합니다 (예 : let ms = Int(LocationManager.location.speed)).

C와 유사한 언어에서 온 경우 고통스러운 느낌입니다. 그러나 그 뒤에는 좋은 이유가 있습니다. 예를 들어 부동 소수점 숫자를 정수형에 할당 할 때 부동 소수점 숫자의 소수 부분은 어떻게됩니까? 함수가 부동 소수점 숫자를 반환하고 우발적으로 잘림 버그가 발생했다는 사실을 잊었을까요?

이를 보완하기 위해 스위프트에는 유형 추론도 있습니다. 명시 적으로 유형을 제어하지 않으려면 그래서, 당신도 그들에게 줄 필요가 없습니다 :

당신은 그냥두고, 유형을 제공 할 필요가 없습니다 시간의 대부분은에서를 유추 할
// 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 

문맥.

관련 문제