黑马程序员_第十天视频学习 Foundation

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

一、            Foundation – 结构体

NSRange(location length)

NSPoint\CGPoint 表示位置,点  NSPoint == CGPoint CGPoint可以跨平台,所以常用CGPoint

NSSize\CGSize 表示尺寸 NSSize == CGSize

NSRect\CGRect (CGPoint,CGSize) NSRect == CGRect 

#import <Foundation/Foundation.h>

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

{

    // 比较两个点是否相同 (xy)

    CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));

   

    // CGSizeEqualToSize(<#CGSizesize1#>, <#CGSize size2#>);

    // CGRectEqualToRect(<#CGRectrect1#>, <#CGRect rect2#>);

    // CGRectContainsPoint(<#CGRectrect#>, <#CGPoint point#>);

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

    NSLog(@"%d",b);

    // CGRectContainsRect(<#CGRectrect1#>, <#CGRect rect2#>);

    return 0;

}

 

void point()

{

    CGPoint p1 = NSMakePoint(10, 10);

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

   

    CGSize s1 = NSMakeSize(100, 50);

    NSSize s2 = CGSizeMake(60, 60);

   

    NSRect rect1 = CGRectMake(0, 0, 100, 100);

    CGRect rect2 = NSMakeRect(0, 0, 100, 100);

    // NSLog(@"x=%f, y=%f, width=%f, height=%f",rect1.origin.x, rect1.origin.y, rect1.size.width, rect1.size.height);

   

    // 将结构体转为字符串

    NSString *str = NSStringFromPoint(p1);

    NSString *str1 = NSStringFromSize(s1);

    NSString *str2 = NSStringFromRect(rect2);

   

    NSLog(@"%@",str);

    NSLog(@"%@",str1);

    NSLog(@"%@",str2);

   

    CGRect rect3 = { {0,0}, {100,90}};

    CGRect rect4 = { p1, s2};

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

   

    // 表示原点

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

   

    // CGSizeZero == CGSizeMake(0, 0);

   

    // CGRectZero == CGRectMake(0, 0, 0, 0);

}

 

/*

 CGRectMake()相当于

CGRect myRect( CGFloat x,CGFloat y, CGFloat width, CGFloat height )

{

    CGRect rect;

    rect.origin.x = x;

    rect.origin.y = y;

    rect.size.width = width;

    rect.size.height = height;

    return rect;

}

 */

 

void range()

{

   

    // @"i love oc"; // love的范围

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

    // NSRange r2 = {.location = 2, .length =4}; // 不用

   

    // NSRange r3 = NSMakeRange(2, 4); // 掌握

   

    NSString *str =@"I love OC";

   

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

    NSRange range = [str rangeOfString:@"ve O"];

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

   

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

    NSRange ranges = [str rangeOfString:@"ja"];

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

   

    // range.location == NSUIntegerMax ==unsigned long ;

    // NSLog(@"%d",NSNotFound);

}

 

二、            Foundation – 类

1、 常用类 – NSString

NSString : 不可变字符串

NSMutableString : 可变字符串

#import <Foundation/Foundation.h>

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

{

    NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is %d",10];

   

    // 拼接内容到s1的后面

    [s1 appendString:@" 11 12"];

   

    // 获取is的范围

    NSRange range = [s1 rangeOfString:@"is"];

    // 删除字符串中的is

    [s1 deleteCharactersInRange:range];

   

   

   

    NSString *s2 = [NSString stringWithFormat:@"age is %d",10];

   

    // 拿到s2的内容拷贝出,再把"11 12"放到后面,然后把拼接好的字符串赋值给s3s2没变化

    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];

   

    NSLog(@"s1 = %@, s2 =%@",s1, s2);

   

    return 0;

}

 

void stringCreate()

{

    /*

     1、字符串的创建

     */

    NSString *str = @"str";

   

    // NSString *str1 = [[NSString alloc]initWithString:@"jack"];

   

    NSString *str3 = [[NSString alloc] initWithFormat:@"age id %d", 10];

   

    // C字符串 --> OC字符串

    NSString *str4 = [[NSString alloc] initWithUTF8String:"jack"];

   

    // OC字符串 --> C字符串

    const char *cs = [str4 UTF8String];

   

    // NSUTF8StringEncoding 用到中文就可以用这种编码

    NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/...." encoding:NSUTF8StringEncoding error:nil];

    // NSString *str5 = [[NSString alloc]initWithContentsOfFile:@"/Users/zhangjingshan/Desktop/练习/1.txt"encoding:NSUTF8StringEncoding error:nil];

    // NSLog(@"\n%@",str5);

   

    // URL : 资源路径

    // 协议头://路径

    // http://

    // file://

    // ftp://

    NSURL *url = [[NSURL alloc] initWithString:@"http://www.baidu.com"];

    NSURL *url1 = [NSURL fileURLWithPath:@"/Users/apple/Desktop/...."];

    NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"str6 = \n%@",str6);

   

    /*

     一般都会有一个类方法跟对象方法配对

     NSString *strq = [NSStringstringWithFormat:@""];

     // [NSStringstringWithContentsOfFile:<#(NSString *)#>encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];

    

     // NSURL *url = [NSURLURLWithString:<#(NSString *)#>];

     // [NSString stringWithContentsOfURL:urlencoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing*)#>];

     */

}

 

void stringExport()

{

    // 字符串的导出到文件

    [@"Jack \n Jack" writeToFile:@"/Users/apple/Desktop/..." atomically:YES encoding:NSUTF8StringEncoding error:nil];

   

    //

    NSString *str= @"3rfsd";

    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/..."];

    [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

 

2、 集合类

1> NSArray\NSMutableArray

 *有序

 *快速创建(不可变):@[obj1,obj2]

 *快速访问元素:数组名[i]

2> NSSet\NSMutableSet

 *无序

3> NSDictionary\NSMutableDictionary

 *无序

 *快速创建(不可变):@{key1 :value1, key2 : value2}

 *快速访问元素:字典名[key]

4> NSArray 和 NSSet对比

 a> 共同点

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

 *只能存放OC对象,不能存放非OC对象(基本数据类型:int、char、float等,结构体,枚举)

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

 b>不同点

 *NSArray是有序的,NSSet是无序的

a、 NSArray

NSArray : 不可变数组

NSMutableArray : 可变数组

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end

main.m

#import <Foundation/Foundation.h>

#import "Person.h"

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

{

    /*

    // @[] 只创建不可变数组NSArray

    // 错误写法

     NSMutableArray*array = @[@"jack",@"rose"];

    [arrayaddObject:@"jim"];

    */

    return 0;

}


void NSArrayUse()

{

    /*

     Person *p =[[Person alloc] init];

     Person*persons[5] = {p, [[Person alloc] init]};

     */

   

    // OC数组不能存放nil

    // OC数组只能存放OC对象,不能存放非OC对象类型,比如intstructenum

   

    // 这个array永远是空数组

    // NSArray *array =[NSArray array];

   

    /*

     1NSArray的创建

     */

    NSArray *array2 = [NSArray arrayWithObject:@"jack"];

   

    // nil是数组元素结束的标记

    NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"rose", nil];

   

    // NSArray *array4 =[NSArray arrayWithObjects:@"jack",@"rose",@"he",nil]; ==

   

    // 快速创建一个NSArray对象

    NSArray *array4 = @[@"jack",@"rose",@"he"];

   

    /*

     2NSArray的元素个数

     */

   

    // [array2 count]; ==array2.count;

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

   

    /*

     3NSArray中元素的访问

     */

   

    NSLog(@"%@",[array3 objectAtIndex:0]); // == array3[0]

   

    // 编译器特性

    NSLog(@"%@",array4[1]); // 使用这种方式

}

 

// 遍历数组

void Use()

{

    Person *p = [[Person alloc] init];

    NSArray *array = @[p,@"jack",@"sfxc"];

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

    //        NSLog(@"%@",array[i]);

    //    }

   

    // id obj代表着数组中的每一个元素

    for (id obj in array)

    {

        // 找出obj元素在数组中的位置

        NSUInteger i = [array indexOfObject:obj];

        NSLog(@"%ld--%@", i,obj);

        if (i == 1)

        {

            break;

        }

    }

   

    // 每遍历到一个元素,就会调用一次block

    // 并且当前元素和索引位置当做参数传给block

    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

       

        NSLog(@"%ld--%@", idx, obj);

       

        if (idx == 1) {

            // 停止遍历

            *stop =YES;

        }

    }];

   

    /*

    enumerateObjectsUsingBlock的本质:

     void(^myBlock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop) {

    

    NSLog(@"%ld--%@", idx, obj);

    

     if (idx == 1){

     // 停止遍历

     *stop = YES;

     }

     };

    

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

     // 用来标记是否需要停止遍历

     BOOL isStop =NO;

    

     // 取出元素

     id obj =array[i];

     

     myBlock(obj,i, &isStop);

    

     if (isStop) {

     break;

     }

     }

     */

   

}

 

// 可变数组的基本使用

void user1()

{

    // NSMutableArray *array=[NSMutableArray array];

    NSMutableArray *array =[NSMutableArray arrayWithObjects:@"rose",@"jim", nil];

   

    // 添加元素

    [array addObject:[[Person alloc] init]];

    [array addObject:@"jack"];

   

    // 删除所有元素元素

    // [arrayremoveAllObjects];

    // 删除指定对象

    [array removeObject:@"jack"];

   

    [array removeObjectAtIndex:1];

   

    NSLog(@"%@",array);

   

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

    // 错误写法

    // [array addObject:nil];

 

}

 

b、 NSSet

#import <Foundation/Foundation.h>

 

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

{

    NSMutableSet *s = [NSMutableSet set];

   

    // 添加元素

    [s addObject:@"back"];

    // 删除元素

    [s removeObject:@"back"];

   

    return 0;

}

 

// set的基本使用

void test()

{

    // 创建一个空的set

    // NSSet *s = [NSSet set];

   

    NSSet *s1 = [NSSet setWithObjects:@"jack",@"rose",@"jack1",@"rose1",@"jack2", nil];

   

    // 随机拿出一个元素

    NSString *str = [s1 anyObject];

   

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

    NSLog(@"%@",str);

}

c、 NSDictionary

#import <Foundation/Foundation.h>

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

{

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

    // 字典是无序的

   

    NSDictionary *dict2 = @{

                            @"name": @"jack",

                            @"address":@"北京",

                            @"qq":@"78834253",

                            @"name1": @"jack",

                            @"name2": @"jack"

                            };

   

    NSArray *keys = [dict2 allKeys];

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

   

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

        NSString *key = keys[i];

        NSString *object = dict2[key];

       

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

    }

   

    [dict2 enumerateKeysAndObjectsUsingBlock:

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

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

        

       //  *stop = YES;

    }];

   

    return 0;

}

 

void test()

{

    /*

     字典:

     key --->value

     索引 ---> 文字内容

    

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

    

     */

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

   

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

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

   

    NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

   

    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:

                          @"jack", @"name",

                          @"北京", @"address",

                          @"3243434", @"qq"

                          , nil];

   

    NSDictionary *dict2 = @{@"name": @"jack",@"address":@"北京"}; // 定义用这个

   

    id obj = [dict objectForKey:@"name"];

    id obj1 = [dict1 objectForKey:@"qq"];

    id obj2 = dict2[@"name"];

   

    NSLog(@"%@",obj);

    NSLog(@"%@",obj1);

    NSLog(@"%@",obj2);

   

    // 返回的是键值对的个数

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

   

    /*

     // 错误代码

    NSMutableDictionary *dict = @{@"name":@"jack"};

     [dictsetObject:@"北京" forKey:@"address"];

     */

}

 

void test2()

{

    NSMutableDictionary *dict =[NSMutableDictionary dictionary];

   

    // 添加键值对

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

    [dict setObject:@"北京" forKey:@"address"];

   

    // 将以前的key@"name"的覆盖

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

   

    // 移除键值对

    // [dictremoveObjectForKey:@"address"];

   

    id obj = dict[@"name"];

   

    NSLog(@"%@",obj);

   

    NSLog(@"%@",dict);

}

void test3()

{

    NSArray *person = @[

                       @{@"name": @"jack", @"qq":@"78834253", @"books":@[@"5分钟突破IOS编程",@"5分钟突破android编程"]},

                       @{@"name": @"rose", @"qq":@"534234"},

                       @{@"name": @"jim", @"qq":@"3425234"},

                       @{@"name": @"jake", @"qq":@"4634352455"}

                        ];

    NSDictionary *jim = person[2];

    NSLog(@"%@",jim);

    // 先取出1位置对应的字典

    // 再取出字典中qq这个key对应的数据

    NSLog(@"%@",person[1][@"qq"]);

    NSLog(@"%@",person[0][@"books"][0]);

   

    NSArray *array = person[0][@"books"];

    NSLog(@"%@",array);

   

}

 

3、 NSNumber和NSValue

NSNumber 之所以能包装基本数据类型为对象,是因为继承了NSValue

#import <Foundation/Foundation.h>

 

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

{

    // 结构体包装成OC对象

    CGPoint p = CGPointMake(10, 10);

    // 将结构体转为Value对象

    NSValue *value = [NSValue valueWithPoint:p];

   

    NSArray *array = @[value];

   

    // value转为对应的结构体

    CGPoint pp = [value pointValue];

 

    return 0;

}

 

void NSNumberTest()

{

    NSNumber *num =[NSNumber numberWithInt:10];

   

    NSDictionary *person = @{

                             @"name" : @"jack",

                             @"age" : num

                             };

    NSNumber *num2 = person[@"age"];

    int age =[num2 intValue];

   

    NSLog(@"%d",age);

}

 

void NSNumberTest2()

{

    NSNumber *num = [NSNumber numberWithDouble:10.5];

   

    double d = [num doubleValue];

   

   

    int a = 20;

   

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

    int b = [str intValue];

   

    NSLog(@"%.1f--%d", d, b);

   

   

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

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

    // @10.5

    // @'A' NSNumber对象  @"A" NSString对象

    // @YES

    NSArray *array = @[

                       @{@"name" : @"jack", @"age": [NSNumber numberWithInt:20]},

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

                       @{@"name" : @"jim", @"age": @25},

                       @{@"name" : @"jake", @"age": @18},

                       ];

   

    // age变量包装成NSNumber对象

    int age = 100;

    @(age); // @age;是错误的

}


三、            Foundation –NSDate

#import <Foundation/Foundation.h>

 

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

{

    NSString *time = @"2011/09/1018:56";

   

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

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

   

    NSDate *date = [formatter dateFromString:time];

   

    NSLog(@"%@",date);

   

    return 0;

}

void test()

{

    // 创建一个时间对象

    NSDate *date = [NSDate date];

   

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

    NSLog(@"%@",date);

   

    NSDate *date2 = [NSDate dateWithTimeInterval:60*60*8 sinceDate:date];

    NSLog(@"%@",date2);

   

    // 1970开始走过的秒数

    NSTimeInterval second = [date2 timeIntervalSince1970];

    NSLog(@"%.2f",second);

   

    NSTimeInterval second2 = [date2 timeIntervalSinceNow];

    NSLog(@"%.2f",second2);

}

 

void date2string()

{

    NSDate *date = [NSDate date];

   

    // 日期格式化类

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

   

    // y M d H m s  H (24) h (12)

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

   

    NSString *str = [formatter stringFromDate:date];

   

    NSLog(@"%@",str);

}

 

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值