前面我们已经把OC的语法学完了, 现在我们来进阶一下, 学习一些稍微深层次一点的东西, 这个就是Foundation框架啦, 框架是什么东西?其实框架就是把类型, 方法一系列东西综合在一起, 这个就叫做框架啦, 现在我们来看看Foundation框架里的常用结构体之一的NSRange.
讲解一下, 什么是NSRange, 其实NSRange是一个范围结构体, 可以用来对对象进行特定范围的操作, 比如:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSString *str = @"123456789";
NSRange r1 = [str rangeOfString:@"9"];
NSLog(@"location = %ld, length = %ld", r1.location, r1.length);
return 0;
}
打印出来的结果:
2015-02-02 22:22:20.067 1.NSRange[11839:980348] location = 8, length = 1
这个结果是说字符@" 9 ", 在str字符串里是第8个位置, 长度是1.
NSRange的创建方法:
1.NSRange ra = {2, 4}; //不用<pre name="code" class="objc">
2.NSRange ra1 = {.location = 2, .length = 3}; //不用
3.NSRange ra2 = NSMakeRange(<#NSUInteger loc#>, <#NSUInteger len#>); //最常用
在实际开发里, 一般都是用第三个方法, 其他两个都不常用, 或者说几乎不用.
有些人肯定有疑问, 找到字符串里的位置和长度是很正常的, 因为字符串里面本身就有, 但如果字符串里面没有呢? 那么会怎么样? 下面让我们一起来看看:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSString *str = @"123456789";
NSRange r1 = [str rangeOfString:@"0"];
NSLog(@"location = %ld, length = %ld", r1.location, r1.length);
return 0;
}
打印出来的结果:
2015-02-02 22:35:38.270 1.NSRange[11862:984557] location = 9223372036854775807, length = 0
解释一下, 为什么 location会打印一大串东西, 而 length是0呢?? 首先解释一下 length, 因为在字符串里不存在该字符, 所以也就没有长度可言, 返回值肯定是0, 那么 location呢, 为什么 location就会返回一大串东西? 其实一旦 NSRange找不到该字符的时候, 返回的是 NSNotFound, 而 NSNotFound就是 -1, 由于 NSNotFound是 unsigned long类型, 所以打印出来是这么一大堆的数字, 下面让我们来看看:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSLog(@"%d ---- %lu", NSNotFound, NSNotFound);
return 0;
}
打印出来的结果:
2015-02-02 22:45:45.497 1.NSRange[11947:987435] location = 9223372036854775807, length = 0
2015-02-02 22:45:45.499 1.NSRange[11947:987435] -1 ---- 9223372036854775807
让我们来看看NSRange里面元素是什么样的类型:
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
好了, 这次我们就讲到这里, 下次我们继续~~