为NSString的整个长度生成NSRange的快捷方式?

Bas*_*que 51 objective-c nsstring ios nsrange

是否有一个简短的方法来说"整个字符串"而不是输入:

NSMakeRange(0, myString.length)]
Run Code Online (Sandbox Code Playgroud)

这种代码中最长的一部分是最不重要的(因为我通常想在整个字符串中搜索/替换),这似乎很愚蠢......

[myString replaceOccurrencesOfString:@"replace_me"
                          withString:replacementString
                             options:NSCaseInsensitiveSearch
                               range:NSMakeRange(0, myString.length)];
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 39

功能?分类方法?

- (NSRange)fullRange
{
    return (NSRange){0, [self length]};
}
Run Code Online (Sandbox Code Playgroud)
[myString replaceOccurrencesOfString:@"replace_me"
                          withString:replacementString
                             options:NSCaseInsensitiveSearch
                               range:[myString fullRange]];
Run Code Online (Sandbox Code Playgroud)

  • 哈.很棒,我们都将它命名为"fullRange",并且我们同时使用了新的复合文字. (8认同)
  • 确实.并同时评论! (2认同)

BJ *_*mer 19

从来没听说过.但您可以轻松添加NSString类别:

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

@implementation NSString (MyRangeExtensions)
- (NSRange)fullRange {
  return (NSRange){0, self.length};
}
Run Code Online (Sandbox Code Playgroud)

  • Geez,我们甚至给它起了同样的名字. (3认同)

Swi*_*ect 11

迅速

NSMakeRange(0, str.length)
Run Code Online (Sandbox Code Playgroud)

或作为extension:

extension NSString {
    func fullrange() -> NSRange {
        return NSMakeRange(0, self.length)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 正确.但问题是"为整个NSString生成NSRange的捷径" (3认同)
  • 问题还在于Objective-C.如果使用Swift,那么也使用String. (3认同)

Odr*_*kir 8

这不短,但是......好吧

NSRange range = [str rangeOfString:str];
Run Code Online (Sandbox Code Playgroud)

  • 聪明.但是我毫不犹豫地介绍了可能有很多CPU工作(将一个长字符串与自身匹配),这对于程序员来说,只需要少一点点打字就可以获得相对较小的好处. (7认同)

vad*_*ian 6

Swift 4+,适用于NSRegularExpressionNSAttributedString

extension String {
    var nsRange : NSRange {
        return NSRange(self.startIndex..., in: self)
    }
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ver 5

斯威夫特2:

extension String {
    var fullRange:Range<String.Index> { return startIndex..<endIndex }
}
Run Code Online (Sandbox Code Playgroud)

let swiftRange = "abc".fullRange
Run Code Online (Sandbox Code Playgroud)

要么

let nsRange = "abc".fullRange.toRange
Run Code Online (Sandbox Code Playgroud)