2014-10-20 2 views
12

प्रलेखन कहते हैं:स्विफ्ट वैश्विक और वैश्विक कार्यों उद्देश्य सी में

वैश्विक स्थिरांक सी में परिभाषित किया और ऑब्जेक्टिव-सी स्रोत फ़ाइलें स्वचालित रूप से स्विफ्ट वैश्विक स्थिरांक के रूप में स्विफ्ट संकलक द्वारा आयात किए जाते हैं।

लेकिन यह दूसरी तरफ के बारे में कुछ भी नहीं कहता है। मुझे एक वैश्विक स्विफ्ट स्थिरता को परिभाषित करने की आवश्यकता है और इसे वैश्विक सी स्थिरता की तरह एक उद्देश्य सी पक्ष देखने में सक्षम होना चाहिए। तेज तरफ की तरह परिभाषित करते हैं:

public let CARDS = ["card1", "card2"] 

और

NSLog(@"Cards count: %d", [CARDS count]) 

मुझे क्या करना चाहिए की तरह उद्देश्य सी पक्ष पर इसका इस्तेमाल करते हैं देखते हैं? मैं पहले से ही की तरह तेजी से स्वचालित रूप से उत्पन्न हैडर आयात किया है:

#import "MyProject-Swift.h" 

और Xcode में अगर मैं command-click उस पर, यह मेरे सही जगह पर तेजी से कोड में लेता है, लेकिन संकलन समय पर मैं:

'User of undeclared Identifier CARDS' 

मेरे उद्देश्य सी पक्ष पर।

+0

वैश्विक स्विफ्ट में परिभाषित वर्तमान में ऑब्जेक्टिव-सी – aleclarson

उत्तर

26

Here is the document के बारे में यह

आप एक वर्ग या प्रोटोकॉल है कि जब तक कि यह ऑब्जेक्टिव-सी के साथ संगत है के रूप में @objc विशेषता के साथ चिह्नित है भीतर कुछ भी करने के लिए उपयोग होगा। यह शामिल नहीं है स्विफ्ट केवल इस तरह के यहाँ सूचीबद्ध उन लोगों के रूप विशेषताएं:

  • जेनेरिक्स
  • tuples
  • Enumerations स्विफ्ट में परिभाषित
  • संरचनाएं स्विफ्ट में परिभाषित
  • शीर्ष स्तर के कार्यों स्विफ्ट
  • में परिभाषित किया गया
  • स्विफ्ट
  • स्विफ्ट
  • में परिभाषित टाइपलाइज़ में परिभाषित वैश्विक चर
  • स्विफ्ट शैली variadics
  • नेस्टेड प्रकार
  • Curried कार्यों
  • (स्थिरांक सहित)

वैश्विक चर ऑब्जेक्टिव-सी से unaccessible हैं।

इसके बजाय, आपको एक कक्षा घोषित करना है जिसमें वैश्विक स्थिरांक के लिए एक्सेसर्स हैं।

// Swift 
public let CARDS = ["card1", "card2"] 

@objc class AppConstant { 
    private init() {} 
    class func cards() -> [String] { return CARDS } 
} 

// Objective-C 
NSArray *cards = [AppConstant cards]; 
+0

वाह सेब ... अंतर के लिए बहुत बहुत साथ नहीं किया जा सकता है। जितना अधिक स्वाभाविक रूप से स्विफ्ट कर सकते हैं, हर अच्छी चीज के लिए तेजी से हैकी कक्षाएं लिखनी होंगी।ऐप्पल कृपया इस – Tim

+0

को ठीक करें ऑब्जेक्टिव-सी में हेडर फ़ाइल बनाने का एक और विकल्प है जिसमें उद्देश्य-सी और स्विफ्ट के बीच साझा सभी स्थिरांक शामिल हैं, और किसी ऑब्जेक्टिव-सी फ़ाइलों में आयात करें जिन्हें स्थिरांक तक पहुंच की आवश्यकता है और साथ ही प्रोजेक्ट की ब्रिजिंग हैडर। –

+1

"इसमें स्विफ्ट-केवल विशेषताओं को शामिल किया गया है जैसे कि यहां सूचीबद्ध:" बिट पिघल रहा है। वैश्विक चर और वैश्विक/शीर्ष स्तर के कार्य तेजी से केवल विशेषताएं नहीं हैं। मैं सी या उद्देश्य-सी में एक वैश्विक कार्य बना सकता हूं और यह स्विफ्ट में दिखाई देता है, लेकिन मैं रिवर्स नहीं कर सकता। –

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