2014-09-11 5 views
4

Im пытается запустить этот код, но компилятор меня прослушивает о том, что Int не может преобразовать в CGFloat, но я никогда не объявлял min, max или value как переменные 'Int' и не упоминал их до.Swift Compiler Error Int не конвертируется в CGFloat

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 
    bird.physicsBody.velocity = CGVectorMake(0, 0) 
    bird.physicsBody.applyImpulse(CGVectorMake(0, 8)) 
} 

func clamp (min: CGFloat, max: CGFloat, value:CGFloat) -> CGFloat { 
    if (value > max) { 
     return max 
    } else if (value < min){ 
     return min 
    }else{ 
     return value 
    } 
} 

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 

    bird.zRotation = self.clamp(-1, max: 0.5, value: bird.physicsBody.velocity.dy * (bird.physicsBody.velocity.dy < 0 ?0.003 : 0.001)) 

} 

Compiler знаки на '-1' следующее 'Int' не конвертируется в "CGFloat"

Пожалуйста, помогите

+0

Попробуйте изменить его -1.0 или -1f. –

+0

Какую версию Xcode вы используете? Кажется, работает нормально в 6 GM. Int автоматически добавляется в CGFloat. –

ответ

11

Pass Int в качестве параметра CGFloatinit:

var value = -1 

var newVal = CGFloat(value) // -1.0 

В вашем случае:

bird.zRotation = self.clamp(CGFloat(-1), max: 0.5, value: bird.physicsBody.velocity.dy * (bird.physicsBody.velocity.dy < 0 ?0.003 : 0.001)) 

Ссылка:

CGFloat:

struct CGFloat { 

/// The native type used to store the CGFloat, which is Float on 
/// 32-bit architectures and Double on 64-bit architectures. 
typealias NativeType = Double 
init() 
init(_ value: Float) 
init(_ value: Double) 

/// The native value. 
var native: NativeType 
} 

extension CGFloat : FloatingPointType { 
    // ... 
    init(_ value: Int) // < --- your case 
    // ... 
} 
+0

Или просто: 'self.clamp (-1.0, max ...)' –

Смежные вопросы