当谈到NSString方法时,你会发现许多都涉及到NSRange。不必担心,它其实只不过是一种C语言结构用来帮助描述一系列的条款,包括一个起点位置和一个计数方法。例如,一个行列通过从另一个字符串中摘取一个子字符串的方法是很有效的。你可以对其指定起始位置以及所需的元素数量(下面会向你具体阐述)。

NSRange 定义

关于NSRange的结构,定义如下:

typedef struct_NSRange 

{

NSUInteger location;

NSUInteger length;

} NSRange;

location是在行列中的起始位置(基于零点)而length是行列中的条目个数。NSUInteger只是单纯的一个无符号的值,它支持32位和64位系统。下面是有关它的定义:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE ||TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef unsigned long NSUInteger;

#else

typedef unsigned int NSUInteger;

#endif

NSRange和字符串

这个示例告诉了你一个创建行列的方法,通过使用相同的字符串来摘录一个子字符串——输出结果为IPA

NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";

//起始位置为25,获取3个特征值

NSRange range =NSMakeRange (25,3);

//这种方法同样有效

// NSRange行列为{25, 3}

NSLog (@"Beershortname: %@", [homebrewsubstringWithRange:range]);

如果你想要搜寻一个子字符串,你可以通过下列代码:

NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";

NSRange range = [homebrew rangeOfString:@"IPA"];

// Did we find the string "IPA" ? 我们找到字符串"IPA"了么?

if (range.length> 0)

NSLog(@"Range is: %@", NSStringFromRange(range));

输出结果将显示为:Range is: {25, 3}。其中有一点很重要,就是指令NSStringFromRange()将显示传回(一个行列)的值作为一个NSString。同样你还可以通过创建一个字符串的行列得到一个NSRangeFromString()功能。

让我们再看另一个示例,下述代码将从字符串的末尾开始向前搜索“ia”字符串:

NSString *homebrew= @"ImperialIndia Pale Ale (IPA)";

//从末尾开始搜索"ia"字符串

NSRange range = [homebrew rangeOfString:@"ia"options:NSBackwardsSearch];

//判别查找到的字符串是否正确

if (range.length> 0)

NSLog(@"Range is: %@", NSStringFromRange(range));

上述结果将显示为:Range is: {12, 2}(“ia”出现在单词“India”中)

NSRange功能

以下就是在处理行列时,可能需要的一些功能:

NSEqualRanges()

NSIntersectionRange()

NSLocationInRange()

NSMakeRange()

NSMaxRange()

NSRangeFromString()

NSStringFromRange()

NSUnionRange()