OC- OC数值类型、NSNumber、NSString、NSMutableString

今天我们主要讲oc的数据类型,说起数据类型,大家可能会想到C语言的数据类型,如:int ,float……,当然我们的OC也有数据类型。那OC的数据类型是怎么分的呢?

OC数据类型

我们在OC阶段通常叫数值类型。
oc的数值类型主要分为两种:typedef类型和对象类型;

以常用数据类型为例,C和OC数值类型的对比如下:

OC- OC数值类型、NSNumber、NSString、NSMutableString_第1张图片

结构体类型 NSPoint…

我们先看看typedefy的结构体类型,他是复杂的数据类型,记住不是对象类型哦。

    NSPoint point = NSMakePoint(10, 10);//声明初始化一个点
    NSRect  rect  = NSMakeRect(0, 0, 100, 100);//矩形区域
    NSSize  size  = NSMakeSize(100, 100);//尺寸
    NSRange range = NSMakeRange(1, 2);//范围

NSValue

我们经常说oc我们只讲对象和类,在oc中我们参与操作的很多时候基本都是对象,但是如果我们的数据是基本数据类型或则复杂的数据类型,那我们怎么办呢—–使用封装。

在OC中我们可以使用NSValue(数值对象),主要用于复杂数据类型的对象化封装,当然也可以将简单数据类型封装为对象。这样我们就可以用他们操作了。

   NSPoint point = NSMakePoint(10, 10);//声明初始化一个点

    NSSize  size  = NSMakeSize(100, 100);//尺寸


  //封装数据
         NSValue *pointValue = [NSValue valueWithPoint:point];
         NSLog(@"%@", pointValue);
         NSValue *sizeValue = [NSValue valueWithSize:size];
         NSLog(@"%@", sizeValue);

         //解封装
         NSPoint piont1 = [pointValue pointValue];
         NSLog(@"%@",NSStringFromPoint(piont1));
         NSSize  size1  = [sizeValue sizeValue];
         NSLog(@"%@",NSStringFromSize(size1));

NSNumber

数值对象,用于简单数据类型的对象化封装;

  //封装基本数据
         NSNumber *intNumber = [NSNumber numberWithInt:12356789];
         NSLog(@"%@", intNumber);
         NSNumber *floatNumber = [NSNumber numberWithFloat:10.5];
         //解封装
         int a = [intNumber intValue];
         float b = [floatNumber floatValue];

         //快速
         NSNumber *fastNumber = @123;
         NSLog(@"%@",fastNumber);


NSNumber简写:
    [NSNumber numberWithChar:’X’] 可简写为  @’X’
    [NSNumber numberWithInt:123] 可简写为  @123
    [NSNumber numberWithBool:YES] 可简写为  @YES

补充:使用NSNumberFormatter对NSNumber与NSString转化

   //NSNumberFormatter工具类
         //第一步:创建一个格式转换器
         NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
         //第二步:设置格式
         [formatter setNumberStyle:NSNumberFormatterSpellOutStyle];
         //转换数据
         NSNumber *number = [NSNumber numberWithInt:12345678];
         NSString *str1 = [formatter stringFromNumber:number];
         NSLog(@"%@", str1);

使用NSNumberFormatter可以快速做出如下格式:

OC- OC数值类型、NSNumber、NSString、NSMutableString_第2张图片

NSString

对于前面的我们只能算开胃菜,如果你要学数据类型,重点还是NSString.

  • NSString是一个类,通过这个类实例化的对象为OC的字符串对象;
  • NSString实例的运算(增、删、查、改等),全部通过方法进行,无法进行任何四则运算;
  • 与C语言的char *类型字符串做一个对比:

OC- OC数值类型、NSNumber、NSString、NSMutableString_第3张图片

NSString常用方法

1.各种初始化

        //最简初始化方式
         NSString *string1 = @"helli";
         //常规初始化
         NSString *string2 = [[NSString alloc] initWithString:string1];
         NSString *string3 = [[NSString alloc] initWithFormat:@"huang%d%@",123, @"abc"];
         //便利构造初始化
         NSString *string4 = [NSString stringWithFormat:@"%d", 123456];

2.字符串拼接 stringByAppend… stringByAppendingFormat


        //一般的字符串拼接方法
        NSString *appendString1 = [string1 stringByAppendingString:string2];
        NSLog(@"append = %@",appendString1);
       //格式字符串的拼接方法
        NSString *appendString2 = [string1 stringByAppendingFormat:@"%@",string2];
        NSLog(@"append2 = %@",appendString2);
        //初始化拼接
        NSString *appendString3 = [NSString stringWithFormat:@"%@%@",string1,string2];
        NSLog(@"append3 = %@",appendString3);

3.字符串截取 subString…


        NSString *newString = [NSString stringWithFormat:@"helloworld"];

        NSString *subString1 = [newString substringFromIndex:5];//[左闭右闭];
        NSLog(@"subString1 = %@",subString1);

        NSString *subString2 = [newString substringToIndex:5];//[左闭右开);
        NSLog(@"subString2 = %@",subString2);
        //low
        NSRange range = {3,3};
        NSString *subString3 = [newString substringWithRange:NSMakeRange(3, 3)];
        NSLog(@"subString3 = %@",subString3);

4.字符串查询 rangeOfString


        NSString *str1 = @"abcd123efg";
         //查找“123”
         NSRange range1 = [str1 rangeOfString:@"123"];
         if (range1.length == 0 && range1.location == NSNotFound) {
             NSLog(@"没有找到!");

           } else {
             NSLog(@"找到了!");
             NSLog(@"range = %@",NSStringFromRange(range1));

         }

5.字符串替换 stringByReplacing…


         NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"123" withString:@"ABC"];
         NSLog(@"%@", str2);

6.字符串比较 isEqualTo… compare


         NSString *str3 = @"abc";
         NSString *str4 = @"Abc";
         BOOL isEqual = [str3 isEqualToString:str4];
         if (isEqual) {
         NSLog(@"相等");
         } else {
         NSLog(@"不想等");
         }
        */
        /*NSOrderedAscending = -1L,升序,小于
          NSOrderedSame, 等于0
          NSOrderedDescending 降序 大于1
          */

        NSComparisonResult result = [str3 compare:str4];
         if (result == NSOrderedAscending) {
         NSLog(@"升序!");
         } else if (result == NSOrderedSame) {
         NSLog(@"相同!");
         } else {
         NSLog(@"降序!");
         }

8.数值转换 integerValue…


         NSString *str5 = @"123";
         NSInteger a1 = [str5 integerValue];
         NSString *str6 = [NSString stringWithFormat:@"%d", 123];

9.大小写转换 uppercaseString、lowercaseString、capitalizedString


         NSString *str7 = @"hello,world.";
         NSString *str8 = [str7 uppercaseString];
         NSLog(@"%@", str8);
         NSLog(@"%@", [str8 lowercaseString]);
         NSLog(@"%@", [str7 capitalizedString]);//首字母大写

NSMutableString可变字符串处理

  • NSString类型是不可变类型的字符串,OC中有专门的可变类型字符串NSMutableString;

  • NSMutableString继承自NSString,所以他可以直接使用NSString的方法,即可以直接作为不可变字符串使用;

  • 几乎所有NSString的运算方法,都同时对应着其可变类型的算法。

  • 一般NSString类型运算都是通过返回值给定一个新NSString对象,而NSMutableString的运算是直接改变原有字符串,所以返回值多为void.

       NSMutableString *mstr1 = [[NSMutableString alloc] initWithFormat:@"%d", 123];
         //便利构造初始化
         NSMutableString *mstr2 = [NSMutableString stringWithFormat:@"%@", @"abcd"];

         // 插入字符串
         [mstr2 insertString:@"123" atIndex:2];
         NSLog(@"%@", mstr2);
         // 删除
         [mstr2 deleteCharactersInRange:NSMakeRange(2, 3)];
         NSLog(@"%@", mstr2);

        //替换
        [mstr2 replaceCharactersInRange:NSMakeRange(0, 2) withString:@"00"];
        NSLog(@"mutable4 = %@",mstr2);

NSRange

C语言使用结构体、指针和数组来构造复杂的数据类型,而结构体和指针在iOS编程中至关重要,Cococa为我们准备了与字符串操作有关的结构体NSRange:
NSRange:用来表示相关事物的范围
typedef struct _NSRange
{
unsigned int location; //location表示起始位置
unsigned int length; //length表示长度
}

类似NSRange,OC复杂的数据类型还有NSPoint、NSSize、以及NSRect。

NSRange有三种创建方式:

比如要得到字符串@“helloRIMIOnline”中@“Online”字符串,需要一个起始位置为9,6个长度的范围,它可以有三种方式创建:
它可以有三种方式创建:
第一种调用函数可以这么写:
     NSRange range =NSMakeRange (9,6);
第二种直接给成员赋值:
    NSRange rangerange.location=9range.length=6;
第三种应用C语言的聚合结构赋值机制:
    NSRange range ={9,6};

你可能感兴趣的:(nsstring,oc基本数据类型,NSValue,NSNumber,OC语言)