2016-12-15 10 views
11

संलग्न स्क्रीन शॉट यह सब कहता है: मेरे पास एक वैध सत्य बूल है, मैं बैंग ऑपरेटर के साथ इसे अस्वीकार करता हूं, और (एक्सकोड मुझे बताता है) मेरे पास एक अवैध मान है।स्विफ्ट बूलियन मान <invalid>

ऐसा प्रतीत होता है कि यह "अमान्य" मान व्यवहार करता है जैसे कि यह गलत था। लेकिन वास्तव में, wtf?

enter image description here

+1

उस बूल की स्मृति या तो कभी शुरू नहीं हुई थी, या किसी भी तरह से दूषित हो गई है। 'बूल' के लिए केवल वैध मान' 0x01' ('true') और' 0x00' ('false') – Alexander

+0

एक्सकोड डीबग विंडो स्पष्ट रूप से दिखाती है कि बूल प्रारंभ किया गया था। यही वह पंक्ति है जो 72 करता है। इसके अलावा, 'सक्षम' मान को अनुकूलित नहीं किया जा सकता क्योंकि यह लाइन 73 पर उपयोग किया जाता है। हालांकि, यह सिर्फ एक एक्सकोड डीबगर बग हो सकता है ... –

+0

मुझे संदेह है कि डिबगिंग सत्र शुरू होने के बाद से यह कोड संपादित किया गया है, और कि कोड कार्यक्रम – Alexander

उत्तर

0

मुझे कोई LLVM विशेषज्ञ हूँ, लेकिन मैं नहीं है जब तक कि अनुकूलन Onone जिस स्थिति में यह अपने कोड अकेला छोड़ दिया जाना चाहिए था पर सेट है, सब पर इस व्यवहार के बारे आश्चर्य होगा। इंटरमीडिएट वैरिएबल सिर्फ बाद में अनुकूलित होने के लिए कह रहा है।

+0

हालांकि (और मुझे यह निर्दिष्ट करना चाहिए था) दोनों सक्षम और अक्षम दोनों विधि में कई बार उपयोग किए जाते हैं। (यह मेरा हिस्सा है कि मेरे पास * सक्षम * अक्षम और अक्षम परिभाषित क्यों है: कोड बेहतर पढ़ता है और अनजाने में एक बैंग अस्वीकृति प्रतीक को छोड़ना मुश्किल होता है।) असल में, डीबगर को उन स्थानों में से एक पर रोक दिया जाता है जहां (स्पष्ट रूप से बोगस) मूल्य का उपयोग किया जा रहा है।अंत में, डीबग मोड में, मेरी अनुकूलन सेटिंग * है * -ऑनोन। –

+0

मैं भी उदारतापूर्वक चर घोषित करता हूं, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं उनका कितना उपयोग करता हूं, फिर भी मुझे उम्मीद है कि वे गायब हो जाएंगे और कुछ बेहतर तरीके से बदल जाएंगे। यदि आपका स्क्रीनशॉट वास्तव में एक डीबग रन से है, जो आप कह रहे हैं, तो मुझे डर है कि आपको किसी और के लिए और अधिक जानकार इंतजार करना होगा। – Andreas

+0

मैं मानता हूं कि संकलक स्थानीय चर को फिर से व्यवस्थित करने के लिए स्वतंत्र है यदि सही रूप से सही है। (मैं एक कंपाइलर लेखक हूं। आप छात्रों को समझाए जाने की संख्या के साथ सहानुभूति व्यक्त करेंगे कि "नहीं, कम स्थानीय लोगों का मतलब अधिक कुशल कोड नहीं है।") लेकिन हाँ स्क्रीनशॉट एक्सकोड डीबगर का है। स्विफ्ट रनटाइम में एक हानिरहित बग हो सकता है। हानिरहित क्योंकि 0xfe (उर्फ -2) वास्तव में नियंत्रण प्रवाह से झूठ के रूप में संभाला गया था। –

1

मैं Xcode 8.3.1 में इस समस्या को और स्विफ्ट 3,1 https://github.com/onmyway133/notes/issues/278

मैं

  • स्वच्छ निर्माण फ़ोल्डर की कोशिश की और डेटा फ़ोल्डर
  • व्युत्पन्न हटा एप्लिकेशन
  • सिम्युलेटर
  • रीसेट हटाएं लिया है
  • एक्सकोड
  • मैक पुनरारंभ करें

लेकिन काम नहीं करता है। वैकल्पिक हल के लिए

let enabled = disable ? false : true 
0

print(theBoolValue) तरह ऐड कोड के लिए सही मान के साथ, एक ही मुद्दा मिल गया है।

लेकिन जब स्विफ्ट कमांड लाइन में p का उपयोग करें। या बस डीबग स्टैक में मान की जांच करें, मान <invalid>(Oxfe) बन गया है।

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