2015-11-19 6 views
7

ich einen Fehler habe, wenn ein Projekt in Xcode kompilieren, heißt es:Swift Ausdruck zu komplex war in angemessener Zeit gelöst wird

Expression zu komplex war in angemessener Zeit gelöst zu werden; Sehen Sie den Ausdruck in verschiedene Unterausdrücke

hier Zerschlagung ist der Code:

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

Antwort

7

Warum die Komplexität für den Compiler nicht reduzieren, indem der Ausdruck Abbau in zwei Unterausdrücke?

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

Sie können auch UINT32_MAX (oder mehr "Swifty" UInt32.max oder .max) verwenden anstelle von 0xFFFFFFFF Lesbarkeit zu verbessern. Wenn ich mich erinnere, ist 0xFFFFFFFF der hexadezimale Wert des maximalen Werts einer vorzeichenlosen 32-Bit-Ganzzahl, wie in der Kopfzeile definiert.

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

Ich denke, dies ist der Punkt (oder zumindest die Frage antwortete ich wollte!) Vermißt: was bedeutet das Compiler-Fehler ??? – mydogisbox

+0

Was denkst du, was es bedeutet? Der Ausdruck war zu komplex für den Compiler und es kam zu einer Zeitüberschreitung beim Versuch, die Operatorüberladungen '+' und '*' aufzulösen: https://devforums.apple.com/message/1097960#1097960 – JAL

+1

Ah! Überladungsauflösung Ich habs. – mydogisbox

Verwandte Themen