2013-02-25 46 views
41

有一小段路說「整個字符串」,而不是打字:用於生成NSString整個長度的NSRange的快捷方式?

NSMakeRange(0, myString.length)] 

看來愚蠢,這種代碼的最長的部分是最重要的(因爲我平時要查找/替換在整個字符串內)...

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

如果需要超過5次,那麼你可以做一個方法/類,但對於下5次你的'NSMakeRange(0,myString.length)]'會變短,不是嗎? – 2013-02-25 08:08:30

回答

37

功能?分類方法?

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

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

哈。令人敬畏的是,我們都將它命名爲'fullRange',並且我們同時使用了新的複合文字。 – 2013-02-25 08:04:43

+1

確實。並在同一時間評論! – 2013-02-25 08:05:01

+0

文字工作得很好,但你也可以返回NSMakeRange(0,[self length]);如果你想。 – 2015-06-01 15:14:46

19

不是我所知道的。但您可以輕鬆地添加NSString類別:

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

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

嘖嘖,我們甚至給它起了同樣的名字。 – 2013-02-25 08:04:44

7

這並不短,但...哦

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

聰明。但是我毫不猶豫地介紹了可能有很多CPU工作的原因(匹配一個長字符串本身),這對我的程序員輸入一點點小的好處是相對較少的。 – 2013-02-25 08:19:45

+0

你說得對,有時候更多的代碼使它更具可讀性和效率。 – Odrakir 2013-02-25 08:30:15

+0

我也使用過這個,並遇到了一個問題:如果你的字符串恰好爲空(@「」),你會得到{NSNotFound,0}。 – Shinigami 2014-05-08 12:52:04

6

斯威夫特

NSMakeRange(0, str.length) 

或作爲extension

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

在Swift中沒有理由使用'NSString'。 – 2017-01-18 12:07:19

+3

正確。但問題是「快捷方式爲整個NSString長度生成一個NSRange」 – SwiftArchitect 2017-01-19 18:16:58

+0

這個問題也是關於Objective-C的。如果你使用Swift,那麼也使用String。 – 2017-08-03 15:16:35

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',我得到編譯時錯誤:」Range '類型的值(又名'Range ')沒有成員'toRange' 「。我使用Swift 3.1運行Xcode 8.3.3。 – ma11hew28 2017-08-12 15:57:55