का उपयोग करके एनएसएआरएआरई में ऑब्जेक्ट इंडेक्स की खोज में मैंने एनएसएआरएआरई इंडेक्सऑफ ऑब्जेक्टपैसिंगटेस्ट का उपयोग करके कुछ उदाहरण देखे हैं, लेकिन मैं उन्हें काम नहीं कर सका (वे एक वैध इंडेक्स नहीं लौटाएंगे)। तो अब मैं एक इनलाइन ब्लॉक का उपयोग करने की कोशिश कर रहा हूं। मैंने इसे एक ब्लॉक टाइप करके किया है, फिर इसे एक संपत्ति के रूप में सेट किया है, इसे संश्लेषित कर रहा है, और इसे कन्स्ट्रक्टर में प्रारंभ कर दिया है। हालांकि इस प्रकार का पूरा बिंदु म्यूट प्रस्तुत करता है, क्योंकि मैं आसानी से एक विधि बना सकता हूं और इसके बजाय इसका उपयोग कर सकता हूं (कम टाइपिंग, कम प्रयास)।एक इनलाइन ब्लॉक
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex: ^NSInteger (NSString *keyword){
for (Observations *obs in self.myAppointment.OBSERVATIONS) {
if ([obs.TIME isEqualToString:keyword] == YES) return (NSInteger)[self.myAppointment.OBSERVATIONS indexOfObject:obs];
}
return (NSInteger)-1;
}];
हालांकि Xcode बस यह नहीं होगा:
मैं क्या हासिल करने की कोशिश कर रहा हूँ इस के साथ कुछ न कुछ है। मैं विभिन्न रूपों की कोशिश की है, लेकिन घोषणा करके इनलाइन एक समस्या है, जो अजीब है, क्योंकि जैसा कि मैंने कहा है, यह typedefing घोषित, और synthesizing इसे इस तरह से काम करता है लगता है:
Observations *obs = [self.myAppointment.OBSERVATIONS objectAtIndex:findObs(keyword)];
findObs कहां है फिर एक परिभाषित ब्लॉक जो एक ही काम करता है। क्या यह एक वाक्यविन्यास मुद्दा है, या क्या मुझे कुछ और महत्वपूर्ण याद आ रही है?
धन्यवाद कि महान काम किया। इसलिए, मैं इसे एक एनएसआईएनटेगर पैरामीटर के रूप में एक इनलाइन ब्लॉक से गुजर रहा हूं (अनिवार्य रूप से ब्लॉक के रिटर्न वैल्यू को पैरामीटर के रूप में पारित करने की अपेक्षा करता है) ऐसा करने योग्य नहीं है, जब तक कि इसका प्रकार परिभाषित और संश्लेषित न हो? –
आप अपने ब्लॉक इन-लाइन को भी कॉल कर सकते हैं: '[... objectAtIndex: (^ एनएसआईएनटेगर (एनएसएसटींग * के) {...}) (कीवर्ड)]; ', लेकिन चीजें थोड़ा गन्दा दिखने लगती हैं। –
यह उदाहरण सरणी में परीक्षण पास करने वाली अंतिम वस्तु को वापस कर देगा। जैसे ही पहली ऑब्जेक्ट मिलती है पुनरावृत्ति को रोकने के लिए, आपको 'Y stop' – Moose