码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-c 数据类型 结构体

时间:2015-10-15 18:59:22      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:

  老师的代码

//

//  main.m

//  数据类型练习一

//

//  Created by 非凡 程序员 on 15/10/14.

//  Copyright (c) 2015 非凡 程序员. All rights reserved.

//


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

    

    

    //传入规定格式的字符串,创建出一个新的字符串

    //通常可变或者不可变都是针对于字符的序列进行更改和不可更改

    //NSString *echo = [NSString stringWithFormat:@"%@ World, %i", @"Hello", 100];

    

    //NSString 不可变的字符串

    //NSMutableString 可变的字符串

    

    //OC中,直接赋值为不可变类型,一般可变类型都会需要申请内存空间

    //申请一块空间,返回一个空字符串

    NSMutableString *echoII = [NSMutableString string];

    //返回一个空字符串,申请一个初始存储空间,可自动增长。

    //NSMutableString *echoIII = [NSMutableString stringWithCapacity:10];

    //追加字符串 append

    [echoII appendString:@"Hello"];

    //删除字符串 delete

    //[echoII deleteCharactersInRange: ]

    

    //查找相关的字符串

    NSRange range =  [echoII rangeOfString:@"H"];

    //location代表找到的开始位置,length代表找到的长度,最小为0

    NSLog(@"%lu , %lu",  range.length , range.location );

    

    //替换字符串

    NSString *echoIII = [echoII stringByReplacingOccurrencesOfString:@"el" withString:@"111111"];


    NSLog(@"%@",echoIII);

    

    //判断两个字符串是否相等

    NSString *stringI = @"1";

    NSString *stringII = @"1";

    if( [stringI isEqualToString:stringII] ){

        NSLog(@"String Success");

    }else{

        NSLog(@"String Error");

    }

    

    NSLog(@"-------   数组练习 ------ " );

    //数组包括 可变数组 NSArray 不可变数组 NSMutableArray

    //数组即相同数据类型的有序集合,数组有下标,下标从0开始

    NSArray *echoArray = @[ @"1", @"2" ];

    //不可变是不可改变相关数组的序列

    NSLog(@"%@", echoArray[1] );

    //可变需要申请一块内存空间

    NSMutableArray *echoMutableArray = [NSMutableArray array];

    //申请初始的内存空间,返回一个空Array

    NSMutableArray *echoMutableArrayI = [NSMutableArray arrayWithCapacity:10];

    //把不可变的Array变成可变的Array

    NSMutableArray *echoMutableArrrayII= [NSMutableArray arrayWithArray: echoArray];

    

    //如果初始长度为2,那追加一个数据到可变数组里此事的长度为3,也就是最大下标就是2 ,追加用add

    [echoMutableArrrayII addObject:@"3"];

    //得到相关的数组的长度[echoMutableArrrayII count]

    NSLog(@"%@, %li", echoMutableArrrayII[2], [echoMutableArrrayII count]);

    

    //删除用remove

    [echoMutableArrrayII removeObject:@"2"];//移除某一个元素

    //[echoMutableArrrayII removeAllObjects];//移除全部

    

    //替换某个下标的数据 某个数

    [echoMutableArrrayII replaceObjectAtIndex:1 withObject:@"15"];

    

    //查找某个下标的数据 遍历查找 echoMutableArrrayII[下标] C的写法

    for( int i = 0 ; i < [echoMutableArrrayII count]; i++ ){

        NSLog(@"for:%@", echoMutableArrrayII[i] );

    }

    // NSLog(@"%@, %li", echoMutableArrrayII[1], [echoMutableArrrayII count]);

    for(NSString *object in echoMutableArrrayII){

        NSLog(@"%@",object);

    }

    //判断2个数组是否相等

    NSArray *arrayII = @[@"1"];

    NSArray *arrayIII = @[@"1"];

    if( [arrayII isEqualToArray: arrayIII] ){

        NSLog( @"Success" );

    }else{

        NSLog( @"Error" );

    }

    

    NSLog(@"--------字典练习--------");

    

    //------字典NSDictionary;字典是由键值对构成;字典的基本形式是@{@"KEY":@"VALUE",@"KEY":@"VALUE"}

    //定义一个不可变字典

    NSDictionary *dict=@{@"2":@"23"};

    //对于一个字典他们的键可以是:idNSNumberNSStringNSArrayNSDictionary类型,同理,其值类型也是可以为NSStringNSArrayNSDictionary

    id number=@"sds";

    NSDictionary *dict1=@{

                          @1:@"2",

                          @"2":@"22",

                          @[@"2",@"32"]:@"2",

                          @{@"2":@"5"}:@"3",

                          number:@"e3"

                          };

//    获取到所有键的值

    NSLog(@"%@",[dict1 allKeys]);

//    获取到所有值(value)的值

    NSLog(@"%@",[dict allValues]);

//    字典的获取方式

    NSLog(@"%@",dict[@"2"]);

    

    //-------可变字典NSMutableDictionary

//    定义一段内存空间

    NSMutableDictionary *muDict=[[NSMutableDictionary alloc]initWithCapacity:10];

    //不可变字典转化为可变字典的方式定义可变字典

    NSMutableDictionary *mudict1=[[NSMutableDictionary alloc]initWithDictionary:dict];

//    键值通过两个数组设置值。注意:两个数组的个数要相同

    NSMutableDictionary *mu=[[NSMutableDictionary alloc]initWithObjects:@[@"1",@"3"] forKeys:@[@"3",@"3"]];

//    通过键值同时设置的方式设置,注意这里是双数个数的对象,否则会出现键值不对应,是值-键-值-键的关系。

    NSMutableDictionary *mudict6=[[NSMutableDictionary alloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",@"three",@"3", nil];

    //增加,再一个可变字典添加一个不可变字典

//    [mudict6 addEntriesFromDictionary:dict];

    NSLog(@"%@",mudict6);

    

    //删除时删除的是键值对

//    按照键,去删除所对应键值对

//    [mudict6 removeObjectForKey:@"1"];

//    一次删除多组建值对

//    [mudict6 removeObjectsForKeys:@[@"1",@"2"]];

//    删除全部键值对

//    [mudict6 removeAllObjects];

    

    NSLog(@"%@",[mudict6 allKeys]);

//    逐个键值对添加

//    setObjectforkey是可以传入id类型参数,而在setValue部分,只能传入NSString类型

    [mudict6 setObject:@"23" forKey:@"name"];

    [mudict6 setValue:@"44" forKey:@"age"];

    NSLog(@"%@",mudict6);

    //通过count计算键值对个数

    NSLog(@"%li", [mudict6 count]);

    

    

    NSLog(@"---------NSNumber练习--------");

    

//-------NSNumber类型:NSNumber 类型可以是Idintfloatdoublechar,注意比

    

    NSNumber *number1=[[NSNumber alloc]initWithInt:1];

    NSNumber *number2=@1;

    NSNumber *number3=number;

    NSNumber *number4=@‘e‘;

    NSNumber *number5=[[NSNumber alloc]initWithChar:‘2‘];

    NSNumber *number6=@YES;

    NSNumber *number7=[[NSNumber alloc]initWithBool:YES];

    NSLog(@"%@",number3);

    

    //---------------NSSet

    /*

     NSSetNSArray对比:

     NSSet中的元素可以重复,NSSArray不能重复

     NSSet是有序的,NSSArray是无序的。

    */

    

    NSLog(@"---------NSSet");

    NSSet *set=[NSSet setWithObject:@"3"];

    NSLog(@"%@",set);

    

    

//    关于NSString

    

    //-----------------NSString类型---------------字符数组,是不可变字符串型,

    //定义NSString对象

    NSString *str=@"123";

    

    // length  测量长度,是对象方法,用对象调用,用作长度比较。

    //注意:在OC中一个汉字是一个字节

    NSString *str1=@"1";

    NSString *str2=@"w";

    NSString *str3=@"";

    NSLog(@"一个数字的字节数%li-一个字母的字节数%li-一个汉字的字节数%li",[str1 length],[str2 length],[str3 length]);

    //isEqualToString 比较内容,是有返回值的,其返回值是BOOL类型,是对象方法,用对象调用,在其参数是对比的字符串对象。其作用是对比字符串

    BOOL compareResult=[str3 isEqualToString:str2];

    NSLog(@"%i",compareResult);

    if ([str3 isEqualToString:str2]) {

        NSLog(@"内容一样");

    }

    else {

        NSLog(@"内容不一样");

    }

    //字符穿转化数值转化

    NSString *numberString=@"123";

    int strToInt=[numberString intValue];

    float strToFloat=[numberString floatValue];

    double strToDouble=[numberString doubleValue];

    NSLog(@"%i---%f---%f",strToInt,strToFloat,strToDouble);

    

    //不可变字符的追加,追加一个和追加多个

    NSString *str4=[str stringByAppendingString:str1];

    NSString *str5=[str stringByAppendingFormat:@"%@--%@",@"green",@"blue"];

    

    NSLog(@"%@=---=%@",str4,str5);

    

    //比较两个字符串值的大小----大于返回1,相等返回0,小于返回-1,字母比较ASCII

    /*

     在比较方法,范围参数指定的部分,而不是全部,接收器的使用比较。该范围不适用于搜索字符串。如,[”“AB”比较:@“ABC”选项:0范围:NSMakeRange0,1]比较“ABC”,而不是一个,并将nsorderedascending

     

     貌似默认的range比较双方最小的也就是两个比较数,一个两位,一个1位,之比较第一位

     */

    NSString *num1=@"123";

    NSString *num2=@"432";

    

    NSInteger changenumber=[num1 compare:num2];

    NSLog(@"%li",changenumber);

    

    //此方法比较字母不区分大小写比较字母

    long num=[num1 caseInsensitiveCompare:num2];

    NSLog(@"%li",num);

    

    /*

    练习一:

    根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

    西安的数字地址码为: 6101XX(其中XX表示区)

    第十七位奇数:男性,偶数:女性

    判断身份证是否为西安人,并显示生日,性别

    

    

    练习二:

    求字符串“158”“39”按十进制数值做差后的结果以字符串形式输出。

    

    

    练习三:

    取出符串“123-456-789-000”中的数字部分,组成一个新的字符串输出。

    

    

    练习四:

    实现函数NSString * stringWithoutNum(NSString *str)

    删除字符串str的所有数字

    (两种方法实现:1.从可变数组中删除数字 2.向可变数组中添加字符)

    

    

    练习五:

    实现函数:NSArray *kickOff10(NSArray *array)

    将数组中的@10去掉

    */

    

    //------------ 字典复习

    //[] 针对于定义不可变数组 {} 针对于定义不可变字典

    NSDictionary *reviseDict = @{ @"name" : @"jack", @"age" : @"10" };

    //C的写法

    NSLog(@"%@", reviseDict[@"name"]);

    //OC的写法

    NSLog(@"%@", [reviseDict objectForKey:@"name"] );

    //简便的写法

    //allValues 返回字典里所有的ValueallKeys 返回字典里所有的Key

    NSLog(@"%@, %@", [reviseDict allValues], [reviseDict allKeys]);

    

    //可变的字典 NSMutableDictionary

    //第一种定义方式 返回一个空的字典

    NSMutableDictionary *reviseMutableDict = [NSMutableDictionary dictionary];

    //第二种定义方式 返回一个空的字典 并且创建一个初始的存储空间

    NSMutableDictionary *reviseMutableDictI = [[NSMutableDictionary alloc]initWithCapacity:10];

    //第三种定义方式 返回一个字典 里面包含里了一个已创建过的不可变的字典集合

    NSMutableDictionary *reviseMutableDictII = [[NSMutableDictionary alloc]initWithDictionary:reviseDict];

    //追加一个键值对

    [reviseMutableDictII addEntriesFromDictionary:@{@"score":@"90"}];

    //修改:C的写法

    reviseMutableDictII[@"score"] = @"80";

    //修改:OC的写法

    [reviseMutableDictII setValue:@"70" forKey:@"score"];

    //删除 根据单个键删除

    [reviseMutableDictII removeObjectForKey:@"score"];

    //删除 根据多个键(数组)删除

    //[reviseMutableDictII removeObjectsForKeys:@[ @"name", @"age" ]];

    

    //返回数组集合里面包含字典里的所有的Key数据

    NSArray *keyArrayI = [reviseMutableDictII allKeys];

    //利用Key数组的有序性,返回字典里的Value

    for( int i = 0 ; i < [reviseMutableDictII count]; i++ ){

        NSLog(@"key: %@, value: %@",keyArrayI[i], reviseMutableDictII[ keyArrayI[i] ]);

    }

    

    //---------------- 枚举

    //C的枚举: 列举、集合、常数

    enum jack{

        age = 10,

        score = 90

    };

    //typedef 定义类型的别名

    //请注意在枚举不允许重复定义

    typedef enum {

        ageI = 10

    }jackI;

    

    //OC 常用枚举:是一个抽象类,它能枚举的形式把例如数组和字典等集合列举出来

    NSArray *enumArray = @[ @"1", @"2", @"3", @"4" ];

    NSDictionary *enumDict = @{ @"name" :@"jack" };

    

    //返回的是一个集合里的枚举数据

    NSEnumerator *enumrator = [enumArray objectEnumerator];

    NSEnumerator *enumratorI = [enumDict objectEnumerator];

    id arrayData;

    

    //返回集合的下一个对象 列举

    while( (arrayData) = [enumrator nextObject] ){

        NSLog(@"enumrator : %@", arrayData);

    }

    

    while( (arrayData) = [enumratorI nextObject] ){

        NSLog(@"enumrartorI : %@", arrayData);

    }

    

    //---------- 结构体

    //C的结构体

    //申明一个结构体,设置结构体里的属性

    //注意:结构体不能在初始赋值

    struct structI{

       //NSString *name;

    };

    

    //注意:在OCARC(自动引用计数)的情况下,不能设置结构体属性

    //struct structI structII= { .name = @"jack" };

    //NSLog(@"structII name: %@", structII.name );

    

    //OCNSRange NSRect NSPoint NSSize

    //结构体一般不需要指针表示

    //NSRange: 一般用于描述一个范围,通常用于字符串、对象查找

    //location: 起始位置 length: 长度

    NSString *string = @"1234567890";

    NSRange rangeII = NSMakeRange( 8, 2 );

    //通过字符串返回范围

    NSRange rangeI = [ string rangeOfString:@"90"];

    //通过范围返回字符串

    NSLog(@"%@", [string substringWithRange:rangeII]);

    NSLog(@"location: %li, length: %li", rangeI.location, rangeI.length );

    

    //NSPoint 用于描述一个坐标 x,y

    NSPoint pointI = NSMakePoint( 3.4, 1.2 );

    CGPoint pointII = NSMakePoint( 3.5, 1.3 );

    NSLog(@"x:%.2f, y: %.2f", pointI.x, pointI.y );

    NSLog(@"x:%.2f, y: %.2f", pointII.x, pointII.y );


    //NSSize 用于描述一个宽高,width,height

    NSSize sizeI = NSMakeSize( 300 , 120 );

    CGSize sizeII = NSMakeSize( 300.1 , 120.1 );

    NSLog(@"width : %.2f , height: %.2f", sizeI.width, sizeI.height);

    NSLog(@"width : %.2f , height: %.2f", sizeII.width, sizeII.height);

    

    //NSRect 用户描述一个坐标以及宽高

    NSRect rectI = NSMakeRect( 1, 2.1, 100, 200.1);

    NSLog(@"x: %.2f , y: %.2f , width: %.2f , height: %.2f",

          rectI.origin.x, rectI.origin.y, rectI.size.width, rectI.size.height);

    NSLog(@"----复习-----");

    

    NSRange newRange=NSMakeRange(2, 3);

    NSRange range2={2,3};

    NSLog(@"%li--%li",newRange.length,newRange.location);

    NSPoint newPoint=NSMakePoint(2, 1);

    NSLog(@"%.2f--%.2f",newPoint.x,newPoint.y);

    NSSize newSize=NSMakeSize(23, 40);

    NSLog(@"%.2f----%.2f",newSize.width,newSize.height);

    NSRect newRect=NSMakeRect(1, 2, 34, 45);

    NSLog(@"%.2f---%.2f---%.2f--%.2f",newRect.origin.x,newRect.origin.y,newRect.size.width,newRect.size.height);

    

    

    //NSDate类型

    

//    定义一个NSDate类型

    NSDate *date1=[[NSDate alloc]init];

//    定义一个NSDate类型并设置值,dateNSDate的一个类方法,用来获取当前时间

    NSDate *date=[NSDate date];

    NSLog(@"now time %@",date);

//    设置时间格式-----NSDate转换为NSString

    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];

//    一般12小时制是hh来表示小时,24小时制用HH

    [dateFormatter setDateFormat:@"yyyyMMdd HH:mm:ss"];

    NSString *nowtime=[dateFormatter stringFromDate:date];

    NSLog(@"%@",nowtime);

//----NSString转换为NSDate

//    定义将要转化的日期

    NSString *stringTime=@"20121225 21:22:21";

//    定义一个时间类型的对象

    NSDate *dateNew=[[NSDate alloc]init];

//    NSString转换为NSDate

    dateNew=[dateFormatter dateFromString:stringTime];

    NSLog(@"========>%@",dateNew);

    


    

//    NSValueNSNumber的父类,可以将结构体包装放进数组里

    

//    回顾NSNumber

//    直接定义一个NSNumber

    NSNumber *newNumber=@1;

//    定义一个NSNumber类型对象的方法----此处可以看做把基本元素包装NSNumber类型(注意:数组里不能直接放int等类型,用NSNumber“包装后或者用字符串表示的形式才可以放入数组)

    NSNumber *Number2=[[NSNumber alloc]initWithFloat:23];

//    NsNumber类型转换为float类型

    float floatNum=[Number2 floatValue];

    NSLog(@"%f",floatNum);

//    定义NSValue的方法

    NSValue *valueNum=[[NSValue alloc]init];

//    NSRange转换为NSValue类型

    NSValue *newValue=[NSValue valueWithRange:newRange];

//    数组不能直接装入结构体类型的对象,经过NSValue”包装可以放入数组里

    NSValue *pointValue=[NSValue valueWithPoint:newPoint];

    NSArray *valueArray=@[newValue,pointValue];

    NSLog(@"%@",valueArray);

    NSLog(@"%@",valueArray[0]);

    

//    NSPoint pointV= [valueArray[0] pointValue];

//    NSLog(@"%f",pointV.x);

    


//  ----------  NSNull--------

    


//    定义一个NSNull类型的对象

    NSNull *null=[NSNull null];

    NSLog(@"%@",null);

//    将这个对象放到数组里,创建一个空数组

    NSArray *nullArray=@[null];

    NSLog(@"%@",nullArray);

    

    

   

    //练习:

//    建立一个数组,用来记录新生报到信息:其元素是学生姓名、学号(学生报到的时间小时和分钟构成)、学生所在队伍位置(XY)、学生报到时间

//    建立一字典,用来记录学生信息和班级,以班级为键,学生信息(数组)为值

//    输出某一学生信息

    

//    提高:如果第一个数组是用学生姓名作为键,数组作为值的字典,取出某位特定学生的信息

    

   


    

    

    

    

    

    

    

    

    

    

    return 0;

}


Objective-c 数据类型 结构体

标签:

原文地址:http://my.oschina.net/u/2483781/blog/517699

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!