2015-04-14 7 views
22

मुझे NSNotification नामों जैसी चीज़ों के लिए लगातार तारों की घोषणा और उपयोग करने की एक अच्छी अच्छी आदत मिली है। मैं उन्हें इतना तरह की घोषणा:उद्देश्य-सी शून्यता: क्वालिफाइंग कॉन्स्टेंट स्ट्रिंग्स

extern NSString * const ABCAwesomeThingHappenedNotification; 
Xcode 6.3 और स्विफ्ट 1.2 की शुरूआत के साथ

, मैं वापस जा रहा हूँ और लेखा परीक्षा ऑब्जेक्टिव-सी कक्षाओं कि स्विफ्ट नई nonnull, nullable, और null_unspecified क्वालिफायर का उपयोग कर के साथ Interop।

जब एक हैडर भी बाहर से दिखाई देने स्थिर तार है कि करने के लिए क्वालिफायर जोड़ने, मैं निम्नलिखित चेतावनी प्राप्त:

चेतावनी: (__nonnull या __nullable) सूचक एक nullability प्रकार निर्दिष्टकर्ता याद आ रही है

हम्म। यह भ्रमित/दिलचस्प है। क्या कोई इस संदेश के पीछे तर्क की व्याख्या कर सकता है? स्विफ्ट में ABCAwesomeThingHappenedNotification का उपयोग करते समय, यह कभी भी सुझाव नहीं देता है कि यह एक वैकल्पिक स्ट्रिंग या निस्संदेह अनचाहे स्ट्रिंग है।

+1

अलग प्रश्न, लेकिन इस संदर्भ में भी दिलचस्प हो सकता है: [स्विफ्ट 1.2 वैकल्पिक बाहरी चर?] (Http://stackoverflow.com/questions/29612639/swift-1-2-optional-external-variable)। –

+0

संबंधित: [स्विफ्ट और ऑब्जेक्टिव-सी के बीच साझा प्रोटोकॉल के अनुरूप वर्ग विधियों को कैसे बनाया जाए?] (Http://stackoverflow.com/questions/29399871/how-to-create-class-methods-that-conform- टू-ए-प्रोटोकॉल-साझा-बीच-स्विफ्ट-और) (लेकिन यह डुप्लिकेट नहीं है) – nhgrif

उत्तर

7

अपने कार्यान्वयन में, आप निर्धारित कर सकते हैं:

जिस स्थिति में
NSString * const ABCAwesomeThingHappenedNotification = @"ABCAwesomeThingHappenedNotification"; 

सूचक स्पष्ट रूप से है nonnull। बहरहाल, यह भी मान्य है: सूचक हमेशा एक अशक्त सूचक है

NSString * const ABCAwesomeThingHappenedNotification = nil; 

जो विचार किया जाना चाहिए nullable क्योंकि।

(के बाद से ऐसा होता है परोक्ष अगर कोई प्रारंभिक मान प्रदान की जाती है nil को स्पष्ट initialisation बेमानी है, लेकिन इस उदाहरण स्पष्ट करता है।)

+0

यह सही उत्तर है – Lneuner

27

मैं मानता हूँ कि इस विनिर्देशक होने की आवश्यकता नहीं किया जाना चाहिए, लेकिन यहाँ वाक्य रचना

है
extern NSString * const MyConstant; 

extern NSString * __nonnull const MyConstant; 
+0

@http: //stackoverflow.com/users/2791584/lneuner: वास्तव में, क्योंकि हम हैं इंटरफेस के बारे में बात करते हुए, यह सही जवाब है। – SwiftArchitect

+0

प्रश्न चेतावनी के पीछे तर्क के लिए पूछता है, सिंटैक्स इसे ठीक करने के लिए नहीं। –

+1

मैं सहमत हूं लेकिन जब आप उत्तर नहीं जानते हैं तो फिक्स एक उत्तर की तरह है। –

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