美文网首页
Foundation框架学习

Foundation框架学习

作者: 一直很安静_25ae | 来源:发表于2019-06-28 17:14 被阅读0次

Foundation框架是其他所有iOS框架的基础,Foundation框架中包含了很多开发中常用的数据类型

  • 结构体
  • 枚举

结构体

iOS常用的结构体有

  • NSRange(location length) 范围
  • NSPoint\CGPoint
  • NSSize\CGSize
  • NSRect\CGRect (CGPint CGSize)
//NSRange的使用
 NSString *str = @"i love oc";  // love的范围    
 NSRange r1 = {2, 4}; // 一般不用,可读性差
 NSRange r2 = {.location = 2, .length = 4};// 不用,麻烦
 NSRange r3 = NSMakeRange(2, 4); // 一般用系统自带的函数
// NSPoint\CGPoint的使用
//第一种
NSPoint p = NSMakePoint(2, 4)
//第二种
NSPoint p =CGPointMake(2, 4)

//将结构体转成字符串
NSString *str = NSStringFromPoint(p);

// 表示原点
 CGPointZero == CGPointMake(0, 0)
//NSSize\CGSize使用同NSPoint\CGPoint的使用一样
//第一种
NSSize s = CGSizeMake(100, 50);
//第二种
NSSize s = NSMakeSize(100, 50);

//将结构体转成字符串
NSString *str = NSStringFromSize(s);
// 表示宽高都为0
 CGSizeZero == CGSizeMake(0, 0)
//CGRect
//第一种
CGRect r1 = CGRectMake(0, 0, 100, 50);
//第二种
 CGRect r2 = { {0, 0}, {100, 90}};
  //第三种  
NSPoint p = NSMakePoint(2, 4)
NSSize s = CGSizeMake(100, 50);
CGRect r3 = {p, s};

//将结构体转成字符串
 NSString *str = NSStringFromRect(r1);

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

其他使用

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

// 比较两个点是否相同(x、y)
  BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
   
  CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)

  CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
   
//判断点是不是在矩形块里面    
 // x (50, 150) y (40 , 90) 
 BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));

Foundation中常用的类有

  • NSString ----- NSMutableString
  • NSArray ----NSMutableArray
  • NSSet --- NSMutableSet
  • NSDictionary-----NSMutableDictionary
  • NSDate
  • NSObject

1. NSString ----- NSMutableString的使用

NSString

//NSString : 不可变字符串
// NSMutableString : 可变字符串

//1.字符串的创建(对象方法创建)
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];

// C字符串 --> OC字符串
/*
//const char *传的是C语言的字符串,所以不要加@;
- (nullable instancetype)initWithUTF8String:(const char *)nullTerminatedCString;  
 */
  NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];

// OC字符串 --> C字符串
 const char *cs = [s4 UTF8String];

 // NSUTF8StringEncoding 用到中文就可以用这种编码
//读取本地文件
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];

//读取资源文件
/*
URL 指的是资源路径
URL的格式 协议头://路径
常见的协议头有:
- file://  
- ftp://
- http://
- https://
*/

/*协议头-->file://
文件路径-->/Users/apple/Desktop/1.txt 绝对路径前面是需要加斜杠的/
所以下面file:///Users/apple/Desktop/1.txt中是三个斜杠///
*/
// NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];  

NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
-------------------------------------------------------------------------------
//2.字符串的创建(类方法创建,一般都会有一个类方法与对象方法配对)
[NSURL URLWithString:<#(NSString *)#>];
[NSString stringWithFormat:@""];
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
-------------------------------------------------------------------------------
// 字符串的导出
[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString *str = @"4234234";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSMutableString

NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
    // 拼接内容到s1的后面
    [s1 appendString:@" 11 12"];
    // 获取is的范围
    NSRange range = [s1 rangeOfString:@"is"];
    [s1 deleteCharactersInRange:range];
    

    NSString *s2 = [NSString stringWithFormat:@"age is 10"];
//Summary:Returns a new string made by appending a given string to the receiver.
    NSString *s3 = [s2 stringByAppendingString:@" 11 12"];

2.NSArray和NSMutableArray的使用

NSArray

     // OC数组不能存放nil值
    // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
    
    // 这个array永远是空数组
  NSArray *array = [NSArray array];

     /*
     1.NSArray的创建
     */
    NSArray *array2 = [NSArray arrayWithObject:@"jack"];
 // nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
    // [array2 count];

// 快速创建一个NSArray对象
    NSArray *array4 = @[@"jack", @"rose", @"4324324"];

/*
     2.NSArray的元素个数
     */
   array.count;

 
    /*
     3.NSArray中元素的访问
     */
    NSLog(@"%@", [array3 objectAtIndex:1]);
    
    //array3[1];
    NSLog(@"%@", array3[0]);

数组的三种便利

    Person *p = [[Person alloc] init];    
    NSArray *array = @[p, @"rose", @"jack"];
        for (int i = 0; i<array.count; i++)
        {
            NSLog(@"%@", array[i]);
        }

    Person *p = [[Person alloc] init];    
    NSArray *array = @[p, @"rose", @"jack"];
     //id obj代表着数组中的每一个元素
        for (id obj in array)
        {
            // 找出obj元素在数组中的位置
            NSUInteger i = [array indexOfObject:obj];
    
            NSLog(@"%ld - %@", i, obj);
           
        }

[array enumerateObjectsUsingBlock:
     
     // 每遍历到一个元素,就会调用一次block
     // 并且当前元素和索引位置当做参数传给block
     ^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld - %@", idx, obj); 
         if (idx == 0)
         {
             // 停止遍历
             *stop = YES;
         }
         
     }];

NSMutableArray

 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
    
    // 添加元素
    [array addObject:[[Person alloc] init]];
    
    [array addObject:@"jack"];
    
    // 删除元素
    //[array removeAllObjects];
    // 删除指定的对象
    // [array removeObject:@"jack"];
    [array removeObjectAtIndex:0];
    
    // 错误写法
    // [array addObject:nil];
    

快速创建数组的使用注意

// @[] 只创建不可变数组NSArray
    NSArray *array = @[@"jack", @"rose"];
    /* 错误写法
    NSMutableArray *array = @[@"jack", @"rose"];
    
    [array addObject:@"jim"];
    */

NSSet

 NSSet *s = [NSSet set];
    
    NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
    
    // 随机拿出一个元素
    NSString *str =  [s2 anyObject];

NSMutableSet

 NSMutableSet *s = [NSMutableSet set];
    
    // 添加元素
    [s addObject:@"hack"];
    
    // 删除元素
     [s removeObject:<#(id)#>];

NSDictionary

/*
     字典:
     key ----> value
     索引 ----> 文字内容
     里面存储的东西都是键值对 
     */
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];

     NSArray *keys = @[@"name", @"address"];
     NSArray *objects = @[@"jack", @"北京"];
     NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
     @"jack", @"name",
     @"北京", @"address",
     @"32423434", @"qq", nil];

 NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

// 字典的取值
id obj = [dict objectForKey:@"name"]; 
id obj = dict[@"name"];
//字典的便利
void use4()
{
    // 字典不允许有相同的key,但允许有相同的value(Object)
    // 字典的无序的
    NSDictionary *dict = @{
    @"address" : @"北京",
    @"name" : @"jack",
    @"name2" : @"jack",
    @"name3" : @"jack",
    @"qq" : @"7657567765"};
    
    //    NSArray *keys = [dict allKeys];
    //
    //    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;
     }];
}

NSMutableDictionary

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    // 添加键值对
    [dict setObject:@"jack" forKey:@"name"];
    [dict setObject:@"北京" forKey:@"address"];
    [dict setObject:@"rose" forKey:@"name"];
    // 移除键值对
    [dict removeObjectForKey:<#(id)#>];

数组和字典的相互嵌套

 NSArray *persons = @[
    @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
    @{@"name" : @"rose", @"qq" : @"767567"},
    @{@"name" : @"jim", @"qq" : @"423423"},
    @{@"name" : @"jake", @"qq" : @"123123213"}
    ];
    // 取数@"5分钟突破android编程"
    NSString *bookName = persons[0][@"books"][1];

集合

  1. NSArray\NSMutableArray
  • 有序
  • 快速创建(不可变):@[obj1, obj2, obj3]
  • 快速访问元素:数组名[i]
  1. NSSet\NSMutableSet
  • 无序
  1. NSDictionary\NSMutableDictionary
  • 无序
  • 快速创建(不可变):@{key1 : value1, key2 : value2}
  • 快速访问元素:字典名[key]

NSNumber

    NSNumber *numb = [[NSNumber alloc] initWithInt:10];

    NSNumber *num = [NSNumber numberWithInt:10];
    NSDictionary *dict =  @{
    @"name" : @"jack",
    @"age" : num
    };
    NSNumber *num2 = dict[@"age"];
    
    //NSNumber->int
    int a = [num2 intValue];

OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等.我们可以把基本数据类型包装成oc对象

// @20  将 20包装成一个NSNumber对像
    NSArray *array = @[
    @{@"name" : @"jack", @"age" : @20},
    @{@"name" : @"rose", @"age" : @25},
    @{@"name" : @"jim", @"age" : @27}
    ];
    /*
    将各种基本数据类型包装成NSNumber对象
    @10.5;
    @YES;
    @'A'; // NSNumber对象
    @"A"; // NSString对象
    */
    
    /*
    将age变量包装成NSNumber对象
    int age = 100;
    @(age);
    NSNumber *numAge = [NSNumber numberWithInt:age];
    */
    
    /*
     对象和基本数据的相互转化
    NSNumber *n = [NSNumber numberWithDouble:10.5];
    int d = [n doubleValue];
    */
 
    //基本数据类型转对象的两种方式
    int a = 20;
    // @"20"
    NSNumber *numb = [NSNumber numberWithInt:20];
    NSString *str = [NSString stringWithFormat:@"%d", a];
    NSLog(@"%d", [str intValue]);

NSValue

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

int main()
{
    // 结构体--->OC对象
    CGPoint p = CGPointMake(10, 10);
    // 将结构体转为Value对象
    NSValue *value = [NSValue valueWithPoint:p];
    // 将value转为对应的结构体
    [value pointValue];
    NSArray *array = @[value ];
    return 0;
}

相关文章

网友评论

      本文标题:Foundation框架学习

      本文链接:https://www.haomeiwen.com/subject/aiiscctx.html