2014-06-04 2 views
1

스위프트를 시도해 보았습니다. 애플이 우리에게 들어가기를 원하는 방향이기 때문에. 그러나 나는 당신이 보일 수 없다는 사실에 정말로 짜증났습니다. 다른 크기의 정수를 추가 :스위프트 : 다른 정수 크기를 사용할 때의 오류

var a: Int64 = 1500 
    var b: Int32 = 12349 

    var c = a + b 
    if a < b { ... } 

수득 된 오류에 대한 과부하를 찾을 수 없습니다 "입니다 '+'는 그 제공된 인수를 '받아 - 그들이 오브젝트 유형입니다 분명하기 때문에 클래스 메소드 중에 것으로 보이지 않는다. 업/다운 컨버팅 정수의 도움이 필요합니다.

같은 상황이 분명히 (CInt + CLong) 어떤 유형의 별명에도 적용됩니다.

2 개의 다른 크기의 정수에 대한 비교 또는 비트 연산 이외에도 정수 연산을 수행 할 수있는 실용적인 상황이 많이 있습니다.

해결 방법? 을 명시 적 주조로 사용하여 연산자가 작동하지 않는 것 같습니다. Swift 언어 책은이 시나리오를 실제로 논의하지 않기 때문에별로 도움이되지 않습니다.

+0

VAR의 지능 = C (a) + 지능 (b) – helderdarocha

답변

7

스위프트 언어 책은 장 "숫자 형식 변환"에서이 시나리오를 논의 수행합니다

let twoThousand: UInt16 = 2_000 
let one: UInt8 = 1 
let twoThousandAndOne = twoThousand + UInt16(one) 

추가의 양쪽 지금 형 UINT16의 때문에 추가 허용됩니다. 출력 상수 (twoThousandAndOne)는 UInt16 값의 합계이기 때문에 UInt16 유형으로 추정됩니다.

+0

알았다. 나는 그것을 놓쳐 버렸음에 틀림 없어 - 고마워! 그것은 많은 어려움을 겪고있는 것처럼 보입니다. 사람들은 단지 이런 식으로 개종하도록 조절 될 것이므로 어쨌든 그것에 대해 생각하지 않을 것입니다. 유용한 정보를 얻으려면 정수 값을 명시 적으로 캐스팅해야하는 다른 언어를 생각할 수 없습니다. 대신 경고가 있어야합니다. 그래도 고마워! –

+3

이동에는 동일한 제한이 있습니다. 거의 발생하지 않는 많은 종류의 오류는 피할 수 있지만 발생했을 때 디버그하기는 매우 어렵습니다 (일반적으로 현장에서). 가능할 때마다'Int' 만 사용하는 것이 명백한 이유입니다. –

+1

64 비트 계산을 수행해야 할 때를 제외하고는 어떻게됩니까? 필자는 Int가 Mac/iOS 스타일의 LP64 체제에서 32 비트 인 C-Int에 매핑된다고 가정합니다.이 경우에는 자세한 정보가 표시됩니다. 나는 오버 플로우 버그에 도움이된다는 것을 알 수 있지만, 명시 적으로 지정하지 않으면 필요한 정수 크기로 캐스팅하여 언어가 나를 위해 처리해야한다고 생각합니다. Swift에서도 여전히 할 수 있습니다. –

7
let a: Int64 = 1500 
let b: Int32 = 12349 
let c = a + Int64(b) 
println("The value of c is \(c)")