Objective-C字符串与数组

来源:互联网 发布:原始网卡mac地址 编辑:程序博客网 时间:2024/05/18 01:53

NSString和NSDictionary只能储存对象,而不能直接储存任何基本类型的数据,如int、float、和struct。

不过你可以用对象来封装基本数据,比如将int型数据封装到一个对象中,就可以将这个对象放入NSArray和NSDictionary中了。

数值类 NSString

//将基本数剧类型转换成对象

NSNumber *number = [[NSNumber alloc]initWithInt:65];

NSNumber *number1 = [[NSNumber alloc]initWithChar:'A'];

NSNumber *number2 = [NSNumber numberWithInt:7];

//输出装换后的对象

NSLog(@"number = %d",number.intValue);

NSLog(@"number1 = %c",number1.charValue);

NSLog(@"number2 = %@",number2.stringValue);

//字面量//将字符串数组存入对象中然后进行输出

NSNumber *number = @2;

NSLog(@"number = %@",number);


CGFloat f = 100.34;

NSNumber *number = @(f);

NSLog(@"number = %@",number);

char c = 'A';

NSNumber *number = @(c);

NSLog(@"number = %@",number);

//其实是将一个基本类型数据封装到NSNumber中后,然后再将另一个对象输出

将创建方法的和提取方法搭配在一起使用是完全可以的,

例如:用numberWithFloat: 创建的NSNumber对象可以用intValue方法来提取数据,

NSNumber会对数据进行适当地转换

这里给大家插播点技术概念:

通常将一个基本类型的数据封装成对象的过程被称为 装箱 ,从对象中提取基本类型的数据叫做 开箱,有些语言有自动装箱的功能,可以自动封装基础类型的数据,也可以自动从封装后的对象中提取基础数据。Objective-C语言不支持自动装箱功能。


NSValue数值

NSNumber实际上是NSValue的子类,NSValue可以封装任意值,你可以使用NSValue将数据结构体放入NSArray或NSDictionary中,使用下面的类方法便能创建新的NSValuel对象。

NSRange range = {1,4};

NSValue *value = [NSValue valueWithRange:range];valueWithRange: // 值范围

NSLog(@"value = %@",value);


//在主函数上面定义结构体

typedefstruct student{

    char name[20];

   char sex;

   int num;

}Student;

//获取结构体的值

Student stu1;

[value getValue:&stu1];

NSLog(@"name = %s",stu1.name);


//定义一个老师结构体

        //定义一个老师结构体变量

        //将变量转换成NSValue对象

        //定义一个老师结构体变量,将NSValue中的值取出

typedefstruct teacher{//结构体定义在主函数上面

    char name[20];

    char sex;

    char age;

    float score;

}Teacher;

Tearcher  tea = {"haicheng",'m',14,99};

        NSValue *value  = [[NSValue alloc]initWithBytes:&tea objCType:@encode(struct teacher)];

        NSLog(@"value = %@",value);

        

        teacher tea1;

      [value getValue:tea1];

        NSLog(@"tea = %s",tea1.name);

1 0