[黑马程序员]15[Foundation框架] Foundation部分学习笔记小结

------- android培训java培训IOS培训、期待与您交流! ----------



Foundation框架] 基本介绍

 

01. Foundation框架基本

 

正如其名,Foundation框架是其他所有ios框架的基础

 

 Foundation框架包含了很多开发中常用的数据类型

 

结构体,枚举,类

 

 要想使用foundation中的数据类型,包含它的主文件即可#import<Foundation/Foundation.h>

 

 Foundation-结构体-01-NSRange // 字符串的起始位置和范围长度

 

 

 Foundation-03-NSPoint\CGPoint  // 表示点的坐标,比如屏幕的触屏点

 

开发中用CGPoint,因为它跨平台

 

int main()

{

   

    // NSRange(location, length) // 字符串的起始位置和范围长度

    // NSPoint\CGPoint          // 表示点的坐标,比如屏幕的触屏点

    // NSSize\CGSize           // UI元素的尺寸

    // NSRect\CGRect          // 包括CGSizeCGPoint,一个UI元素的位置和尺寸

   

    CGPoint p1 = NSMakePoint(10, 10);

    NSPoint p2 = CGPointMake(20, 20); //最常用

   

    NSSize s1 = CGSizeMake(100, 50);

    CGSize s2 = NSMakeSize(100, 50);

   

    CGRect r1 = CGRectMake(0, 0, 100, 50);

   

    // CGPointZero == CGPointMake(0, 0);

   

    CGRect r4 = {CGPointZero,CGSizeMake(100, 90)};

   

    CGPointEqualToPoint(p1, p2); // BOOL类型,判断两个点是否相同

   

    CGSizeEqualToSize(s1, s1); // 同上

   

    CGRectEqualToRect(r1, r4); // 同上

   

    // 使用这些函数的前提是添加CoreGraphics框架

   

    // NextStep Foundation

   

    BOOL i = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(130, 70));

   

    NSLog(@"%d",i);

   

    NSString *str = NSStringFromPoint(p1);

   

    NSString *str1 = NSStringFromSize(s1);

   

    NSString *str2 = NSStringFromRect(r1);

   

    //   NSLog(@"%@",str2);

    //

    //   NSLog(@"%@",str1);

   

    return 0;

}

 

 

 

int test()

{

    // NSRange(location, length)

    // NSPoint\CGPoint

    // NSSize\CGSize          // UI元素的尺寸

    // NSRect\CGRect          //

   

    //   NSRange(location, length)

    //   @"i love oc";

    //

    //   location = 2(空格也算一个)

    //   length = 4

    //   struct Date {

    //       int year;

    //       int month;

    //       int day;

    //   };

    //

    //   struct Date d = {2011,9,10};

   

    //   @"i love oc"

    //

    //   NSRange r1 = {2,4}; // 不用

    //   NSRange r2 = {.location = 2, .length = 4}; //太麻烦,也不用

    //   NSRange r3 = NSMakeRange(2, 4); // 应该这样定义

    //

   

    NSString *str = @"i love oc";

   

    // 查找某个字符串在str中的范围

    // 如果找不到,length = 0, location =NSNotFound == -1

    NSRange range = [str rangeOfString:@"java"];

   

    NSLog(@"loc=%ld,length=%ld", range.location, range.length);

   

    return  0;

}

 

02. NSSet,

 

// NSSet 无序存放的类集合

 

// NSSet NSArray的对比

// 1>共同点

// *都是集合,都能存放多个OC对象

// *只能存放OC对象,不能存放非OC对象类型

// *本身都不可变,都有一个可变的子类

 

// 2>不同点

// *NSArray有顺序,NSSet没有顺序

 

 

 

int main()

{

    NSMutableSet *s = [NSMutableSet set];

   

    // 添加元素

    [s addObject:@"hack"];

   

    // 删除元素

    [s removeObject:@"hack"];

   

    return 0;

}

 

 

// NSSet用的比较少

 

int main1()

{

    NSSet *s = [NSSet set]; // 空的,不能加东西,因为不可变

   

    NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",@"tom",@"haha", nil];

   

    // 取东西

    NSString *str = [s2 anyObject];

   

    NSLog(@"%@",str);

   

    //NSLog(@"%ld",s2.count);

   

    return 0;

}

 

03. NSDictionary,

 

// 三个类集合里最好用,最灵活的一个

 

 

// 字典的遍历

 

int main()

{

    // 字典不允许有相同的key,但允许有相同的value(object)

    // 字典是无序的

    NSDictionary *dict = @{@"name" : @"jack", @"qq" : @"234453456",@"address" : @"beijing", @"shouji" : @"136xxxxxx"};

   

    //   NSArray *keys = [dict allKeys];

    //   NSLog(@"%@",keys);

    //

    //   for (int i =0; i<dict.count; i++) {

    //       NSString *key = keys[i];

    //       NSString *object = dict[key];

    //

    //       NSLog(@"%@ = %@",key,object);

    //   }

   

    // 第二种遍历方法  科学好用的方法

    [dict enumerateKeysAndObjectsUsingBlock:

     ^(id key, id obj, BOOL *stop) {

         NSLog(@"%@ - %@",key,obj);

        

         //*stop = YES;

     }];

   

    return 0;

}

 

 

 

 

 

 

 

 

 

 

// 注意点

int main3()

{

    // 讲不可变字典赋值给可变字典,NSDictionary并没有setobject方法

    NSMutableDictionary *dict = @{@"name" : @"jack"}; // 错误写法

   

    [dict setObject:@"rose" forKey:@"name"];

   

    return 0;

}

 

 

 

 

// NSMutableDictionary

int main2()

{

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];

   

    // 添加键值对

    [dict setObject:@"jack" forKey:@"name"];

   

    [dict setObject:@"beijing" forKey:@"address"];

   

    [dict setObject:@"rose" forKey:@"name"];

   

    // 移除键值对

    //[dict removeObjectForKey:<#(id)#>];

   

    NSString *str = dict[@"name"];

    NSLog(@"%@",str);

   

    // 打印整个字典(键值对)

    NSLog(@"%@",dict);

   

    return 0;

}

 

 

// 基本用法

int main1()

{

    // 字典

    // key->value

    // 索引->文字内容

    // 里面储存的东西都是键值对

   

    //NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];

   

    //   NSArray *keys = @[@"name",@"address"];

    //   NSArray *objects = @[@"jack",@"北京"];

    //

    //   NSDictionary *dict = [NSDictionary dictionaryWithObjects:objectsforKeys:keys];

   

    //   NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

    //                         @"jack",@"name",

    //                          @"beijing",@"address",

    //                         @"1234234234",@"qq",nil];

   

    // xcode的封装,自动生成重复代码

    NSDictionary *dict = @{@"name": @"jack", @"address": @"beijing"}; // 字典的标准写法

   

    //   id obj = [dict objectForKey:@"address"];

    //封装上句

    id obj = dict[@"name"]; // 封装后写法

   

    NSLog(@"%@",obj);

   

    //dict.count // 返回的是键值对的个数

    NSLog(@"%ld",dict.count);

   

    return 0;

}

 

04. NSNumber,

 

// 1.NSNumber

// 把基本数据类型包装成对象

// 之所以能转换包装,是因为继承了NSValue

 

 

// 2.NSValue

// 可以包装任何东西

 

int main()

{

    // 将结构体包装成对象

   

    // 结构体->OC对象

   

    CGPoint p = CGPointMake(10, 10);

    // 将结构体转为value对象

    NSValue *value = [NSValue valueWithPoint:p];

   

    // value转为相应结构体

    //[value pointValue];

   

    NSArray *array = @[value ];

   

    @"value";

   

    return 0;

}

 

 

// NSNumber将各种基本数据类型包装成对象

int main2()

{

    // @20 20包装成一个NSNumber对象

    // 将各种基本数据类型包装成对象

    NSArray *array = @[

                       @{@"name" : @"jack", @"age" : @20},

                       @{@"name" : @"jack", @"age" : @10.5},

                       @{@"name" : @"jack", @"age" : @YES},

                       @{@"name" : @"jack", @"age" : @'A'}

                      

                       ];

   

    // age变量包装成NSNumber对象

    int age = 100;

    @(age); // @age计算机会把它当关键字

   

   

    NSNumber *n = [NSNumber numberWithDouble:10.5];

   

    int d = [n doubleValue];

   

   

    // 包装成字符串

    int a =20;

   

    NSString *str = [NSString stringWithFormat:@"%d",a];

   

    NSLog(@"%d",[str intValue]);

   

    return 0;

}

 

05. NSDate

 

// NSDate 一个NSDate对象就可以表现一个时间

 

//

// 字符串转为时间

int main()

{

    NSString *time = @"2011/09/0815:34";

   

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

    formatter.dateFormat = @"yyyy/MM/ddHH:mm";

   

    NSDate *date = [formatter dateFromString:time];

   

    NSLog(@"%@",date);

   

    return 0;

}

 

 

 

// 日期格式化

 

int main2()

{

    NSDate *date = [NSDate date];

   

    // 日期格式化类

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

    formatter.dateFormat = @"yyyy-MM-ddHH:mm:ss"; // 固定格式,小写hh12小时制

   

    // @2011-04-21 17:23:45

    NSString *str = [formatter stringFromDate:date];

   

    NSLog(@"%@",str);

   

    return 0;

}

 

 

 

 

int main1()

{

    // 创建一个时间对象

    NSDate *date = [NSDate date];

   

    // 打印出得时0时区的时间(北京-8)

    NSLog(@"%@",date);

   

    NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];

   

    // 1970开始走过的秒数

    NSTimeInterval seconds = [date2 timeIntervalSince1970];

   

    //[date2 timeIntervalSinceNow];

   

    NSLog(@"%@",date2);

   

   

   

    return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值