मैं कुछ समय के लिए आईओएस प्रोजेक्ट पर काम कर रहा हूं, और मैंने हाल ही में मैक प्रोजेक्ट को कोड पोर्ट करने का निर्णय लिया है। क्योंकि मैंने अपने कोड में एनएसआईएनटेगर का उपयोग करना चुना है, और एनएसआईएनटेगर पर्यावरण-निर्भर टाइपकास्ट है, इसका मतलब है कि आईओएस और मैक ऐप्स पर मेरे चर अलग-अलग प्रकार हैं।उद्देश्य-सी विकास में आईओएस से मैक में जाने पर, एनएसआईएनटेजर्स टाइप मिलान त्रुटियों
जब मैं मैक पर टेस्ट स्वीट चलाने के लिए, अपने सभी STAssertEquals कॉल त्रुटि के साथ विफल "प्रकार बेमेल -" क्योंकि प्रकार मेल नहीं खाते:
NSInteger foo = 1;
STAssertEquals(foo, 1, nil); // Test fails!!
मेरी scalars Typecasting काम करने के लिए लगता है, लेकिन यह वास्तव में गन्दा लगता है:
NSInteger foo = 1;
STAssertEquals(foo, (NSInteger)1, nil); // Succeeds, but is ugly!!
Am मैं यहाँ कुछ याद आ रही? मुझे संदेह करना शुरू हो रहा है कि एनएसआईएनटेजर्स का उपयोग करने का निर्णय खराब विकल्प था।
अद्यतन: शायद this article संबंधित है। ऐसा लगता है कि टाइपकास्टिंग स्केलर्स का समर्थन करना है।
मैं निम्नलिखित विचार ग्रहण करेंगे होगा लगभग निश्चित रूप से बुरा है, लेकिन मैं समझ मैं पूछता था : क्या एनएसआईएनटेजर्स के रूप में "1" जैसे अवांछित स्केलर का इलाज करने के लिए कंपाइलर को मजबूर करने का कोई तरीका है? –
मुझे विश्वास नहीं है। संकलक एक (लंबे समय तक हस्ताक्षरित) (या लंबे समय तक हस्ताक्षरित) के लिए एक महत्वपूर्ण बड़े पूर्णांक को बढ़ावा देगा, लेकिन मुझे विश्वास नहीं है कि इस व्यवहार को मुफ्त में पाने का एक तरीका है (भले ही वहां था, शायद आप नहीं चाहेंगे ऐसा करने के लिए :)) – iccir