2015-11-19 17 views
7

sto avendo un errore quando si compila un progetto in Xcode, che dice:espressione Swift era troppo complesso per essere risolto in tempi ragionevoli

Espressione era troppo complesso per essere risolto in tempi ragionevoli; considerare rompere l'espressione in distinte sub-espressioni

ecco il codice:

static func random(min: CGFloat, max: CGFloat) -> CGFloat { 
    return CGFloat(Float(arc4random()/0xFFFFFFFF) * (max - min) + min) 
} 

risposta

7

Perché non ridurre la complessità per il compilatore rompendo l'espressione in due sotto-espressioni?

static func random(min: CGFloat, max: CGFloat) -> CGFloat { 
    let rand = CGFloat(arc4random()/0xFFFFFFFF) 
    return (rand * (max - min) + min) 
} 

È anche possibile utilizzare UINT32_MAX (o il più "Swifty" UInt32.max o .max) al posto di 0xFFFFFFFF per migliorare la leggibilità. Se ricordo, 0xFFFFFFFF è il valore esadecimale del valore massimo di un numero intero a 32 bit senza segno definito nell'intestazione <stdint.h>.

#define UINT32_MAX 0xffffffff /* 4294967295U */ 
+2

Penso che questo non risponda al punto (o almeno alla domanda che volevo rispondere!): Che cosa significa errore del compilatore ??? – mydogisbox

+0

Cosa pensi che significhi? L'espressione era troppo complessa per il compilatore ed è scaduta cercando di risolvere i sovraccarichi dell'operatore '+' e '*': https://devforums.apple.com/message/1097960#1097960 – JAL

+1

Ah! Risoluzione di sovraccarico. Fatto. – mydogisbox