2015-11-19 25 views
7

要解決編譯在Xcode項目時,我有一個錯誤,它說:斯威夫特表達過於複雜,在合理的時間

表達過於複雜,在合理的時間內得到解決;考慮分手的表達成不同的子表達式

下面的代碼:

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

回答

7

爲什麼不打破錶達分爲兩個子表達式減少編譯器的複雜性?

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

您還可以使用UINT32_MAX(或更多的 「SWIFTY」 UInt32.max.max)代替0xFFFFFFFF以提高可讀性。如果我記得,0xFFFFFFFF<stdint.h>標頭中定義的無符號32位整數的最大值的十六進制值。

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

我認爲這錯過了一點(或者至少是我想要回答的問題!):那編譯器錯誤是什麼意思? – mydogisbox

+0

您認爲這意味着什麼?這個表達式對於編譯器來說太複雜了,它試圖解決'+'和'*'操作符的超載:https://devforums.apple.com/message/1097960#1097960 – JAL

+1

啊!重載解析。得到它了。 – mydogisbox