문제점은 32 비트 및 64 비트 아키텍처의 차이점입니다. 목표를 컴파일하는 대상 아키텍처는 선택된 장치에 의해 결정됩니다. 예를 들어, Xcode에서 대상으로 선택한 iPhone 4S 시뮬레이터가있는 경우 32 비트 용으로 빌드됩니다. iPhone 5S 시뮬레이터를 선택한 경우 64 비트 용으로 구축 할 수 있습니다.
정확히 무슨 일이 일어나는지 알아낼 수있는 충분한 코드가 포함되어 있지 않습니다 (할당하려는 변수의 유형을 알아야합니다). 그러나 여기에 제 이론이 있습니다. 첫 번째 오류에서, sprite.speed는 아마도 CGFloat 일 것입니다. CGFloat는 32 비트 대상에서 32 비트 ("float"), 64 비트 대상에서 64 비트 ("double")입니다. 예를 들면 다음과 같습니다.
var x:CGFloat = Double(arc4random())/0x100000000
... 64 비트 대상에서 두 번 넣기 때문에 잘 컴파일됩니다. 그러나 32 비트 대상으로 컴파일 할 때 부동 소수점을 두 번 채우기 위해 정밀도를 잃어 버리기 때문에 오류가 발생합니다.
이 모두에서 작동합니다 :
var x:CGFloat = CGFloat(arc4random())/0x100000000
귀하의 다른 오류가 정확하게 같이 width
및 height
을 선언 한 유형을 모른 채 (다시 불구하고, 내가 그들을 재생할 수없는 동일한 문제에 의해 발생합니다.) 예를 들어, 32 비트 아키텍처 용으로 컴파일 할 수 없게됩니다 :
let lengthDiceroll = Double(arc4random())/0x100000000
let width:CGFloat = 5
var y:CGPoint = CGPointMake(width * lengthDiceroll, 0)
을 ... lengthDiceroll이 두 번 있기 때문에, 그래서 width * lengthDiceroll
는 두 번이다. CGPointMake는 CGFloat의 인수를, 그래서 당신은 부동에 두 번 (64 비트) 물건하려는
이 두 아키텍처에 컴파일 (32 비트.) :
let lengthDiceroll = Double(arc4random())/0x100000000
let width:CGFloat = 5
var y:CGPoint = CGPointMake(width * CGFloat(lengthDiceroll), 0)
... 또는 아마도 더 좋을 것입니다. lengthDiceroll을 CGFloat로 선언하십시오. 그것은 32 비트 아키텍처에 정확하지 않습니다, 그러나 그것은 CGFloat의 점의 일종 :
let lengthDiceroll = CGFloat(arc4random())/0x100000000
let width:CGFloat = 5
var y:CGPoint = CGPointMake(width * lengthDiceroll, 0)
스위프트는 여전히 베타, 당신은 SWIFT에 대한 애플 개발자 포럼에서 응답을받을 가능성이 더 높습니다. –
나는 그래서 조각오나 5S와 4S 시뮬레이터 – connor
을 실행하는 오류 중 하나가받지 못했습니다, CGFloat가 64 비트 인 경우는 작동하지만 32 비트입니다하지 않을 때? ('CGPointMake'는 CGFloat' 인수'소요되며,'CGFloat'는 ... 32 비트 대상에 플로트, 64 비트 대상에서 더블) 그것은 또한 –