2013-02-25 53 views
41

वहाँ कहने के लिए "पूरी स्ट्रिंग" के बजाय बाहर टाइपिंग एक छोटी रास्ता नहीं है:एनएसएसटींग की पूरी लंबाई के लिए एनएसआरेंज उत्पन्न करने के लिए शॉर्टकट?

NSMakeRange(0, myString.length)] 

यह मूर्खतापूर्ण है कि कोड के इस प्रकार के सबसे लंबे समय तक हिस्सा कम से कम महत्वपूर्ण है (क्योंकि मैं आमतौर पर खोज करना चाहते हैं/की जगह लगता है पूरे स्ट्रिंग के भीतर) ...

[myString replaceOccurrencesOfString:@"replace_me" 
          withString:replacementString 
          options:NSCaseInsensitiveSearch 
           range:NSMakeRange(0, myString.length)]; 
+0

आप 5 से अधिक बार की जरूरत है, तो आप एक विधि/श्रेणी बना सकते हैं, लेकिन नीचे के लिए 5 बार आपका 'एनएसएमकेरेंज (0, myString.length)]' छोटा होगा, है ना? –

उत्तर

37

फ़ंक्शन? श्रेणी विधि?

- (NSRange)fullRange 
{ 
    return (NSRange){0, [self length]}; 
} 

[myString replaceOccurrencesOfString:@"replace_me" 
          withString:replacementString 
          options:NSCaseInsensitiveSearch 
           range:[myString fullRange]]; 
+6

हां। बहुत बढ़िया है कि हम दोनों ने इसे 'फुलरेंज' नाम दिया है, और हम दोनों एक ही समय में नए यौगिक अक्षर का उपयोग करते हैं। वास्तव में –

+1

। और एक ही समय में टिप्पणी की! –

+0

शाब्दिक काम ठीक है, लेकिन आप एनएसएमकेरेेंज (0, [स्व लंबाई]) वापस भी कर सकते हैं; अगर तुम चाहते हो। –

19

मुझे पता नहीं है। लेकिन आप आसानी से NSString श्रेणी जोड़ सकते हैं:

@interface NSString (MyRangeExtensions) 
- (NSRange)fullRange 
@end 

@implementation NSString (MyRangeExtensions) 
- (NSRange)fullRange { 
    return (NSRange){0, self.length}; 
} 
+3

गीज़, हमने इसे भी वही नाम दिया। –

7

यह अच्छी तरह से कम नहीं है, लेकिन ... ओह

NSRange range = [str rangeOfString:str]; 
+6

चालाक। लेकिन मैं प्रोग्रामर के लिए थोड़ा कम टाइपिंग के अपेक्षाकृत छोटे लाभ के लिए बहुत सी सीपीयू काम (खुद के खिलाफ एक लंबी स्ट्रिंग से मिलान करना) पेश करने में संकोच करता हूं। –

+0

और आप सही हैं, कभी-कभी कोड का थोड़ा और अधिक इसे और अधिक पठनीय और कुशल बनाता है। – Odrakir

+0

मैंने इसका भी उपयोग किया और एक समस्या में भाग गया: यदि आपकी स्ट्रिंग खाली हो जाती है (@ ""), तो आपको {NSNotFound, 0} मिलता है। – Shinigami

6

स्विफ्ट

NSMakeRange(0, str.length) 

या एक extension के रूप में:

extension NSString { 
    func fullrange() -> NSRange { 
     return NSMakeRange(0, self.length) 
    } 
} 
+0

स्विफ्ट में 'एनएसएसटींग' के साथ काम करने का कोई कारण नहीं है। –

+3

सही। लेकिन सवाल यह है कि "एनएसएसटींग की पूरी लंबाई के लिए एनएसआरेंज उत्पन्न करने के लिए शॉर्टकट" – SwiftArchitect

+0

प्रश्न उद्देश्य-सी के बारे में भी है। यदि आप स्विफ्ट का उपयोग करते हैं, तो स्ट्रिंग का भी उपयोग करें। –

5

स्विफ्ट 2:

extension String { 
    var fullRange:Range<String.Index> { return startIndex..<endIndex } 
} 

रूप

let swiftRange = "abc".fullRange 

या

let nsRange = "abc".fullRange.toRange 
+0

'" abc ".fullRange.toRange' के लिए, मुझे संकलन समय त्रुटि मिलती है:" प्रकार का मान 'श्रेणी <स्ट्रिंग.इंडेक्स>' (उर्फ 'रेंज <स्ट्रिंग। कैरेक्टर व्यू.इंडेक्स>') में कोई सदस्य 'toRange' नहीं है । " मैं स्विफ्ट 3.1 के साथ एक्सकोड 8.3.3 चला रहा हूँ। – ma11hew28