2015-11-19 16 views
7

Tôi đang gặp một lỗi khi biên dịch một dự án trong Xcode, nó nói:biểu Swift là quá phức tạp để được giải quyết trong thời gian hợp lý

Biểu hiện là quá phức tạp để được giải quyết trong thời gian hợp lý; xem xét phá vỡ sự biểu hiện thành rõ rệt tiểu biểu

đây là các mã:

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

Trả lời

7

Tại sao không làm giảm sự phức tạp cho trình biên dịch bằng cách phá vỡ sự biểu hiện thành hai tiểu biểu thức?

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

Bạn cũng có thể sử dụng UINT32_MAX (hoặc nhiều hơn "Swifty" UInt32.max hoặc .max) ở vị trí của 0xFFFFFFFF để cải thiện khả năng đọc. Nếu tôi gọi lại, 0xFFFFFFFF là giá trị hex của giá trị lớn nhất của số nguyên 32 bit không dấu được xác định trong tiêu đề <stdint.h>.

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

Tôi nghĩ điều này bỏ lỡ điểm (hoặc ít nhất câu hỏi tôi muốn được trả lời!): Lỗi trình biên dịch đó có nghĩa là gì ??? – mydogisbox

+0

Bạn nghĩ điều đó có nghĩa là gì? Biểu thức quá phức tạp đối với trình biên dịch và nó đã hết thời gian cố gắng giải quyết quá tải của toán tử '+' và '*': https://devforums.apple.com/message/1097960#1097960 – JAL

+1

Ah! Độ phân giải quá tải. Hiểu rồi. – mydogisbox

Các vấn đề liên quan