【黑马程序员】-Foundation框架

------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

        在学习完c和oc之后,接下来就是对于Foundation框架的学习,对于框架这一块,通过学习我感觉这一块就是为大家提供一些公共的工具(写好的类)。对于一些经常用到的东西,Foundation框架已经封装好了,大家可以拿来直接应用。废话不多说,接下来就写一些自己学到的东西。

一、结构体

       Foundation框架中的结构体主要包含:NSRange、NSPoint/CGPoint、NSSize/CGSize、NSRect/CGRect。

1、NSRange:表示一个范围,它的定义形式为:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
结构体中的NSUInteger表示是long类型,location为位置,length为长度。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSString *str = @"i love oc"; //定义一个字符串
    
    //利用结构体求出love在字符串中的位置
    NSRange range = [str rangeOfString:@"love"];
    
    NSLog(@"%ld, %ld", range.location, range.length); //输出位置,2,4
    
    return 0;
}

在找不到的情况下,location的返回值是-1,length的返回值是0。


2、CGPoint/NSPoint表示一个点,它的形式为:

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
x表示点得横坐标,y表示点的纵坐标,CGFloat表示double类型。CGPoint是跨平台的结构体,而NSPoint是非跨平台的。

    CGPoint p1 = CGPointMake(12, 10);  //常用定义方式
    //NSPoint p1 = NSMakePoint(11, 3);  //另一种定义方式

3、NSSize/CGSize表示一个区域,结构体定义为:

struct CGSize {
  CGFloat width;
  CGFloat height;
};
width表示宽度,height表示高度, CGFloat表示double类型。

    CGSize size = CGSizeMake(20, 22); //常用定义方式
    NSSize size1 = NSMakeSize(20, 22); //另一种定义方式
4、NSRect/CGRect表示在某个的一个区域,结构体定义为:

typedef struct _NSRect {
      NSPoint origin;
      NSSize size;
} NSRect;
可以看出在这个结构体中,拥有NSPoint结构体和NSSize结构体,分别表示点和区域。

    NSRect rect = NSMakeRect(23, 13, 10, 8);
    CGRect rect1 = CGRectMake(12, 23, 15, 11);  //常用定义方式
    CGRect r2 = {{4, 5}, {23, 3}};
    CGRect r3 = {CGPointZero, CGSizeZero};
二、如何打印结构体?

1、利用遍历,逐个打印结构体中的数据,这点比较麻烦,在实际应用中一般不会用到。

2、把整个结构体转成字符串

    NSPoint p2 = NSMakePoint(11, 3);  //另一种定义方式
    NSString *str2 = NSStringFromPoint(p2); //把结构体转换成字符串
    
    NSLog(@"p2 = %@", str2); //输出字符串 输出结果为:p2 = {11,3}
      因此可以类推,还存有的指令有:NSStringFromSize(), NSStringFromRange(), NSStringFromRect()。
三、字符串

        Foundation框架中的字符串主要包含NSString,NSArray,NSSet,NSDictionary,NSDate,NSObject。

1、NSString就是基本的字符串类型,在之前的操作中经常用到。它含有一个子类NSMutableString。区别:NSString创建的字符串是不可改变的,而NSMutableString创建的字符串是可以改变的。

字符串的创建方式:

    NSString *str = @"i love oc"; //定义一个字符串
    NSString *str1 = [[NSString alloc] initWithFormat:@"age is %d", 10];
    
    //c字符串转oc字符串
    NSString *s2 = [[NSString alloc] initWithUTF8String:"jack"];
    
    //oc字符串转c字符串
    const char *s3 = [s2 UTF8String];

URL:资源路径,形式为:协议头://路径。网络资源路径一般用http://...表示,本地资源用file://...表示。

    NSString *str = [[NSString alloc] initWithContentsOfFile:@"Macintosh HD/用户/zhushilong/xcode程序/Xcode程序/Foundation框架代码/06-Foundation框架-结构体/bb.txt" encoding:NSUTF8StringEncoding error:nil];

2、集合类( NSArray,NSSet,NSDictionary,NSDate,NSObject

(1)NSArray/NSMutableArray

       NSArray定义的是一个不可变的数组,而NSMutableArray定义的是一个可以改变的数组。数组中可以存放任何的oc对象,但是基本数据类型不能放到数组中。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSArray *array = [NSArray array]; //定义一个数组,但是这样定义的数组之只能为空。
    NSArray *a = @[@"jack", @"jim",@"rose"];  //定义不可变数组,快捷方式。此种方法只能创建不可变数组
    
    NSMutableArray *array1 = [NSMutableArray array]; //定义一个可变数组
    [array1 addObject:[[NSString alloc] init]]; //为可变数组添加元素
    [array1 addObject:@"jack"];
    [array1 addObject:@"rose"];
    
    NSLog(@"%ld", array1.count); //输出结果为3
    
    [array1 removeObject:@"jack"]; //移除数组中的对象
    [array1 removeObjectAtIndex:0]; //移除数组中的0位置对象
    
    NSLog(@"%ld", array1.count); //输出结果为1
    return 0;
}
(2)NSSet

NSSet和NSArray对比:

1> 共同点:*都是结合类;

                   *都只放oc对象;

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

2> 不同点:*NSSet无序,NSArray有序。

    //set方法使用
    NSSet *s = [NSSet set]; //创建一个空的set,而且不可改变
    //创建一个set字符串,并进行初始化,注意元素是无序的
    NSSet *s1 = [NSSet setWithObjects:@"jack", @"jim", @"rose", nil];
    
    NSString *str0 = [s1 anyObject]; //任意去一个元素
(3)NSDictionary/NSDMutableDictionary

NSDictionary中存储的都是键值对。对应关系为:索引->文字内容, key->value。

    //创建一个字典对象,不可变
    NSDictionary *dic = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
    id obj = [dic objectForKey:@"name"];  //查找对象
    
    //快速创建字典方式,注意字典中的对象也是无序的
    NSDictionary *dic1 = @{@"name":@"jack", @"address":@"北京"};
    id obj1 = dic[@"name"]; //快速提取对象
    
    //创建一个可改变的字典
    NSMutableDictionary *dic2 = [NSMutableDictionary dictionary];
    [dic2 setObject:@"jack" forKey:@"name"]; //添加字典内容
    [dic2 removeObjectForKey:@"name"]; //删除字典元素























------- <ahref="http://www.itheima.com" target="blank">android培训</a>、<ahref="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值