一、NSRange结构体 1.这个结构体,是Foundation框架中定义的1个结构体 这个结构体一般是来干嘛的 这个结构体的变量一般是来表示什么数据的 看它的定义啊 typedef struct _NSRange { NSUInteger location; //代表子串在主串中出现的下标 NSUInteger length; //代表子串在主串中匹配的长度 } NSRange; 它有几个属性啊,是不是两个属性啊 一个location,一个length 我现在定义一个结构体变量,我是不是可以这么定义啊: NSRange range ; 那这个结构体变量一般用来表示什么样的数据 一般用来表示子字符串在主字符串中的范围 表示一段范围 这个结构体变量,一般情况下用来表示1段范围 例如,现在教室里坐着有同学 每个同学有座位吧 我现在要你声明1个变量,保存这段儿范围 一个同学、二个同学、三个同学、四个同学,这段儿范围 声明一个变量,把这段儿范围保存起来 怎么保存 这四个人在教室里是不是有一段范围啊,这个范围是什么 从几开始,下标,是不是从0开始 有几个长度,4个 所以表示一个范围的话,要用几个数据去表示啊,两个 一个是这段儿范围开始的下标,一个是这段儿范围匹配的长度 所以,这个结构体变量一般情况下用来表示1段范围,特别用在子串在主串中的范围表示 例如,@“hahajackhehe”,这个字符串中,@"jack"这个子串的在这个主串中的范围是 下标是几,4,匹配几个,匹配4个 4 4,就是@"jack"在这个字符串@"hahajackhehe"中的范围 如果我用个结构体来表示呢,用个什么结构体,是不是NSRange类型的结构体 NSRange range = {4,4}; range这个变量的值,就表示@"jack"在这个主串中的范围 location的值是4,位置以4开头,匹配几个长度,匹配4个长度 所以,以后啊,如果你想声明一个变量来表示一段儿范围,需不需要自己再去定义结构体了,不需要了,为什么,这个结构体是不是人家系统已经定义好了啊 2.这个NSRange结构体变量的创建 声明并初始化结构体变量的方式 假如现在我要声明1个NSRange的结构体变量,并且要初始化 1) 第一种方式:NSRange range 要加星吗,不要加星吧 然后初始化 range.location = 3; range.length = 4; 我们最原始的方式,是不是这种方式啊 这种方式,我们就可以创建一个NSRange类型的结构体变量,并且为它的属性赋值 2)第二种方式:NSRange range = {3 , 7}; 这样它会按照顺序把3赋给第一个属性,把7赋给第二个属性 3)第三种方式:NSRange range = {.location = 3 , .length = 7 }; 这样表示把3赋给这个结构体变量的location属性,把7赋给这个结构体变量的length属性 4)第四种方式:就是我们这个Foundation框架里定义的函数 这个函数呢,可以快速的创建一个NSRange结构体变量返回 这个函数叫什么名字呢 NSMakeRange ( NSUInteger loc , NSUInteger len ) 例如,我给它传个3,再传个7 NSMakeRange( 3 , 7 ); 这个时候,它就返回一个什么呢,返回1个NSRange的结构体 NSRange range = NSMakeRange(3,7); 这个结构体的属性,就是什么啊,3,7 这个函数叫做NSMakeRange(loc,len); 返回1个指定属性的NSRange结构体变量 所以以后啊,如果你想要创建一个NSRange结构体变量的话,我建议你用这个NSMakeRange(loc,len)函数就可以了 5)这个NSRange结构体变量是不是有两个属性啊,一个location属性,一个length属性 我想把它的值打印出来,我怎么打印 是不是NSLog(@“%lu”,range); 这么写肯定是不可以的,这是个结构体,里面有两个属性,是不是啊,所以只能这么写: NSLog(@“range.location = %lu range.length = %lu”,range.location,range.length); 输出:range.location = 3 range.length = 7 但是有一个问题,你觉不觉得这个好麻烦啊 我要去打印这个结构体变量的属性的值,这么打印是不是好麻烦啊 所以,Foundation框架中又定义了一个函数 可以将一个NSRange结构体变量转换为NSString字符串 这个函数叫什么名字呢,叫做NSStringFromRange 这个函数的签名如下: NSString * _Nonnull NSStringFromRange(NSRange range) 给它传一个NSRange变量,它就可以把这个range变量转换成字符串格式啊,我们打出来看一下 NSLog(@“%@”, NSStringFromRange(range)); 输出:{3,7} 所以,如果你想打印NSRange结构体变量的话,就可以用这种方式 NSStringFromRange函数,可以将NSRange结构体变量转换为指定格式的字符串