2013-02-25 2 views
41

Есть короткий способ сказать «вся строку», а не печатали:Ярлык для создания NSRange для всей длины NSString?

NSMakeRange(0, myString.length)] 

Это кажется глупым, что самая длинная часть такого кода является наименее важной (потому что я обычно хочу найти/заменить в пределах всей строки) ...

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

Если вам нужно больше, чем в 5 раз, то вы можете сделать метод/категорию, Но под 5 раз ваша 'NSMakeRange (0, myString.length)]' будет короче, не так ли? –

ответ

37

Функция? Метод категории?

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

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

Hah. Удивительно, что мы оба назвали его «fullRange», и что мы оба использовали новые составные литералы, в то же время. –

+1

Действительно. И прокомментировал в то же время! –

+0

Литералы работают отлично, но вы также можете вернуть NSMakeRange (0, [self length]); если хотите. –

19

Не знаю, о чем я знаю. Но вы можете легко добавить NSString Категория:

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

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

Geez, мы даже дали ему то же имя. –

7

Это не короче, но ... Ну да ладно

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

Умный. Но я не решаюсь представить, что может быть большим количеством работы процессора (сопоставление длинной строки с самим собой) за относительно небольшую выгоду от немного меньшего набора текста для меня программистом. –

+0

И вы правы, иногда немного больше кода делает его более читабельным и эффективным. – Odrakir

+0

Я также использовал это и столкнулся с проблемой: если ваша строка оказывается пустой (@ ""), вы получаете {NSNotFound, 0}. – Shinigami

6

Swift

NSMakeRange(0, str.length) 

или как extension:

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

Нет причин работать с 'NSString' в Swift. –

+3

Правильно. Но возникает вопрос: «Ярлык для генерации NSRange для всей длины NSString» – SwiftArchitect

+0

Вопрос также в Objective-C. Если вы используете Swift, используйте String. –

5

Swift 2:

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

как в

let swiftRange = "abc".fullRange 

или

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

Для '' abc ".fullRange.toRange', я получаю ошибку времени компиляции:« Значение типа «Range » (aka «Range ») не имеет члена 'toRange' «. Я запускаю Xcode 8.3.3 с Swift 3.1. – ma11hew28

 Смежные вопросы

  • Нет связанных вопросов^_^