• 【NSRange结构体 Objective-C语言】


    一、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结构体变量转换为指定格式的字符串

  • 相关阅读:
    护理管理学选择题汇总(人卫第三版)
    Nacos源码系列—订阅机制的前因后果(上)
    计算输入的正数和负数个数
    Golang Type关键字
    MySQL第五讲·关于外键和连接, 如何做到关联查询?
    IGBT和SiC MOSFET的驱动参数的计算方法
    金仓数据库KingbaseES物理备份恢复命令选项(stanza-upgrade命令)
    【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出
    Jenkins + SpringCloud(多模块)+ Vue系统详细构建配置
    笔试强训48天——day15
  • 原文地址:https://blog.csdn.net/madoca/article/details/127416779