2016-02-11 8 views
9

Xcode निम्न पंक्ति के बारे में शिकायत कर रहा है संग्रहीत:पूर्णांक शाब्दिक अतिप्रवाह जब में 'इंट'

let primary = UInt32(0x8BC34AFF) 

इस त्रुटि संदेश के साथ:

Integer literal '2344831743' overflows when stored into 'Int' 

मैं देख रहा हूँ कि यह एक पर हस्ताक्षर किए पूर्णांक overflows कि, लेकिन मैं जानबूझकर यूआईएनटी 32 इस्तेमाल किया। मेरा सवाल यह है कि "मैं इसे कैसे ठीक कर सकता हूं" के बजाय "यह कैसे हो सकता है"।

+1

यह त्रुटि बहुत घातक हो सकता है - यह लक्ष्य मंच पर निर्भर हो सकता है तो अपने कार्यक्रम संकलन और iPhone 6 के लिए ठीक चला सकते हैं, और फिर जब तुम iPhone 5 के लिए सिम्युलेटर स्विच इस त्रुटि पॉप अप होता है और संकलन रोकता है! सौभाग्य से नीचे दिया गया जवाब समस्या को हल करता है, और 32-बिट बनाम 64-बिट पृष्ठभूमि बताता है। – RenniePet

उत्तर

15

UInt32(0x8BC34AFF) प्रारंभकर्ता को कॉल करके UInt32 बनाता है। UInt32 प्रारंभकर्ता आपको बुला रहे हैं:

init(_ v: Int) 

समस्या यह है कि एक 32-बिट डिवाइस पर (iPhone5 और पुराने), प्रकार Int 32-बिट है। तो, आप निरंतर 0x8BC34AFF गुजर रहे हैं Int ओवरफ़्लो करता है कि आप UInt32 के प्रारंभकर्ता से गुज़र रहे हैं। वैकल्पिक रूप से

let primary = 0x8BC34AFF as UInt32 

, चर घोषित UInt32 होने के लिए और बस लगातार आवंटित:

तरह से 32-बिट और 64-बिट उपकरणों पर इस काम के लिए प्रकार के पूर्णांक शाब्दिक कास्ट करने के लिए है :

let primary:UInt32 = 0x8BC34AFF 
+0

इसके लिए धन्यवाद। मेरा कोड अभी तक बनाया गया है और ठीक काम करता है, जब किसी कारण से अचानक यह ठीक नहीं था। मैंने डिवाइस या कुछ भी नहीं बदला है, हालांकि यह पहली बार हो सकता है कि मैंने इस डिवाइस के लिए एक्सकोड 9 के साथ निर्माण करने का प्रयास किया है। – Oded

+1

मुझे '1489064651000 UIU6464 के रूप में करना था – 3lvis

संबंधित मुद्दे