前面我们已经把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是unsignedlong类型, 所以打印出来是这么一大堆的数字, 下面让我们来看看:
#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;
好了, 这次我们就讲到这里, 下次我们继续~~