2015-06-09 9 views
8

मैं सिर्फ 2015 WWDC नमूना कोड (https://developer.apple.com/sample-code/wwdc/2015/) से FourInARow डाउनलोड किया है और फ़ाइल AAPLViewController.mअजीब संपत्ति घोषणा वाक्य रचना युक्त कोणीय कोष्ठक <>

@property NSArray<NSMutableArray<CAShapeLayer *> *> *chipLayers; 

में एक अजीब संपत्ति घोषणा देखा कि यह क्या मतलब है?

उत्तर

12

यह उद्देश्य-सी के लिए एक नया जोड़ा है, जिसे Lightweight Generics कहा जाता है। इसे स्विफ्ट और ऑब्जेक्टिव-सी के बीच अंतःक्रियाशीलता बढ़ाने के लिए आईओएस 9/ओएस एक्स 10.11 में पेश किया गया था। प्रलेखन कहते हैं:

NSArray, NSSet और NSDictionary प्रकार हल्के सामान्य parameterization का उपयोग करने का ऑब्जेक्टिव-सी घोषणाओं उनकी सामग्री के प्रकार संरक्षित के बारे में जानकारी के साथ स्विफ्ट द्वारा आयात किए जाते हैं।

उदाहरण के लिए, निम्नलिखित ऑब्जेक्टिव-सी संपत्ति घोषणाओं पर विचार करें:

@property NSArray<NSDate *>* dates; 
@property NSSet<NSString *>* words; 
@property NSDictionary<KeyType: NSURL *, NSData *>* cachedData; 

यहाँ कैसे स्विफ्ट उन्हें आयात करता है:

var dates: [NSDate] 
var words: Set<String> 
var cachedData: [NSURL: NSData] 
2

मीकल Ciuba के जवाब के अलावा:

इसके बावजूद प्रलेखन (Lightweight Generics) स्पष्ट रूप से इसका उल्लेख नहीं करता है, यह केवल स्विफ्ट के लिए नहीं है: यह वाक्यविन्यास उद्देश्य-सी को प्रभावित करता है। यदि आप CAShapeLayer* की एक म्यूटेबल सरणी घोषित करते हैं, तो असंगत तत्व जोड़ना या एक्सेस करना संकलक चेतावनियां उत्पन्न करेगा। जैसे

NSMutableArray<CAShapeLayer*>* array = [NSMutableArray new]; 
[array addObject:[CATextLayer new]]; // warning 
CATextLayer* layer = array[0]; // warning 
CALayer* layer = array[0]; // OK, because CALayer is a superclass of CAShapeLayer 
+0

सुपरक्लास अपने उप-वर्ग के अनुरूप कैसे हो सकता है? क्या आपका मतलब विपरीत नहीं है? – Honey

+0

@ asma22 यह वही मामला है जब संकलक चेतावनी जारी करेगा, क्योंकि यह गलत है। – mojuba

+0

लेकिन आप 'कैलियर' स्वीकार कर रहे हैं जो 'कैशपलेयर' का सुपरक्लास है, इसमें 'कैशपलेयर' ऑब्जेक्ट की सभी चीजें नहीं हैं। 'कैशपलेयर' उप-वर्ग है जिसे अनुरूप माना जाना है। आपकी टिप्पणी में आपने कहा * ठीक है, क्योंकि कैलियर कैशपलेयर * का एक सुपरक्लास है। जो कुछ ऐसा होना चाहिए था। * ठीक है, क्योंकि CALAYER CAShapeLayer * – Honey

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