概述
Foundation框架
Foundation框架是Cocoa编程、iOS编程的基础框架,包括:字符串、集合、日期、时间等基础类。
一、NSString和NSMutableString的使⽤
C语⾔,字符串是由char(ASCII码)字符组成。
Objective-C,字符串是由unichar(Unicode)字符组成。
NSString:不可变字符串,继承NSObject;即创建之后,内容和长度不能更改,其字符串截取、拼接等常用方法返回值类型为(NSString *),本质是得到一个新的字符串。
NSMutableString:可变字符串,继承NSString;即创建之后,修改的是字符串本身,其字符串插入、替代等常用方法返回值类型为(void)。
创建一个字符串,可以使用实例⽅法(init方法)或便利构造器。
NSString和NSMutableString的使用与讲解,请阅读以下代码:
#pragma mark - 字符串类
#if 0 /* OC 字符串由 Unichar(Unicode) 字符组成 */
NSLog(@"unichar: %lu", sizeof(unichar));
#endif
#pragma mark ** 不可变字符串
#if 0 /* 1.创建字符串 */
// NSString *string = [[NSString alloc] initWithString:@"Hello, World!"];
/* 最常用的方法 */
/* 字面量形式创建字符串 */
NSString *string2 = @"Hello!";
/* 初始化方法创建字符串 */
NSString *string3 = [[NSString alloc] initWithString:string2];
/* 便利构造器创建字符串 */
NSString *string4 = [NSString stringWithString:string2];
NSLog(@"%@", string4);
/* format */
NSString *string5 = [NSString stringWithFormat:@"str:%@", string4];
NSLog(@"%@", string5);
NSString *name = @"ZhangSan";
NSString *age = @"18";
/* 创建一个新字符串 */
NSString *person = [NSString stringWithFormat:@"我叫%@, 今年%@", name, age];
NSLog(@"%@", person);
/* 2. 获取字符串长度 */
NSString *str = @"0123";
NSLog(@"length: %lu", [str length]);
NSLog(@"len: %lu", str.length);
#endif
#if 0 /* 3. 获取子字符串 */
NSString *str = @"用户名: Tom, 密码: abc";
/* 取"abc" */
NSString *subStr = [str substringFromIndex:14];
NSLog(@"%@", subStr);
/* 取"用户名" */
NSString *subStr1 = [str substringToIndex:3];
NSLog(@"%@", subStr1);
/* 取"Tom" */
NSRange rang = NSMakeRange(5, 3);
NSString *tom = [str substringWithRange:rang];
NSLog(@"%@", tom);
#endif
#if 0 /* 4. 拼接字符串 append */
NSString *province = @"吉林省";
NSString *city = @"四平市";
NSString *area = @"铁西区";
NSString *locol = [province stringByAppendingString:city];
NSString *locol2 = [[province stringByAppendingString:city] stringByAppendingString:area];
NSLog(@"%@", locol2);
NSString *locol3 = [province stringByAppendingFormat:@"%@%@", city, area];
NSLog(@"%@", locol3);
#endif
#if 0 /* 替换字符串 replac */
NSString *word = @"helle";
NSString *newWord = [word stringByReplacingOccurrencesOfString:@"helle" withString:@"hello"];
NSLog(@"%@", newWord);
NSString *word1 = [word stringByReplacingCharactersInRange:NSMakeRange(4, 1) withString:@"o"];
NSLog(@"%@", word1);
#endif
#if 0 /* 字符串相等 eq */
NSString *userName = @"ZhangSan";
if ([userName isEqualToString:@"ZhangSan"]) {
NSLog(@"该账户存在");
}
else {
NSLog(@"该账户不存在");
}
#endif
#if 0 /* 字符串比较 comp */
NSString *str1 = @"Hello";
NSString *str2 = @"Hey";
NSLog(@"%ld", [str1 compare:str2]);
#endif
#if 0 /* 示例: 给定一个图片文件名,判断字符串中是否以“png”结尾,如果是就替换成“jpg”,如果不是,就拼接”.jpg”。 */
NSString *image = @"haha.png";
if ([[image substringFromIndex:image.length - 3] isEqualToString:@"png"]) {
image = [image stringByReplacingCharactersInRange:NSMakeRange(image.length - 3, 3) withString:@"jpg"];
}
else {
image = [image stringByAppendingString:@"jpg"];
}
NSLog(@"%@", image);
#endif
#if 0 /* 判断字符串已指定的字符串开头或者结尾 prefix */
NSString *image = @"haha.png";
if ([image hasSuffix:@"png"]) {
image = [image stringByReplacingOccurrencesOfString:@"png" withString:@"jpg"];
}
else {
image = [image stringByAppendingString:@"jpg"];
}
NSLog(@"%@", image);
#endif
#pragma mark ** 可变字符串
#if 0 /* 1. 创建可变字符串 */
NSMutableString *mStr = [NSMutableString stringWithFormat:@"abcdef"];
NSLog(@"%@", mStr);
/* 2. 拼接字符串 */
[mStr appendString:@"是可拼接的"];
NSLog(@"%@", mStr);
/* 3. 插入字符串
* abcdef是可拼接的字符串
*/
[mStr insertString:@"字符串" atIndex:mStr.length];
NSLog(@"%@", mStr);
/* 4. 删除字符串
* 删除"字符串"
*/
[mStr deleteCharactersInRange:NSMakeRange(mStr.length - 3, 3)];
NSLog(@"%@", mStr);
#endif
#if 0 /* 字符串与数值类型转换 value */
NSString *str = @"100";
int a = str.intValue;
NSLog(@"a: %d", a);
NSString *aStr = [NSString stringWithFormat:@"%d", a];
NSLog(@"aStr: %@", aStr);
#endif
#if 0 /* 字符串大小写转换 case */
NSString *str = @"I have an iPhone";
/* 小写 */
NSLog(@"%@", [str lowercaseString]);
/* 大写 */
NSLog(@"%@", [str uppercaseString]);
/* 首字母大写 */
NSLog(@"%@", [str capitalizedString]);
#endif
二、NSArray和NSMutableArray的使用
iOS中存放数据的容器类都称为集合(collection)。数组是有序集合,只能存放对象。数组通过下标取元素,且下标从0开始。数组与字符串类一样也分为不可变数组(NSArray)和可变数组(NSMutableArray)。
NSArray和NSMutableArray的使用与讲解,请阅读以下代码:
#pragma mark - 数组
#pragma mark ** 不可变数组
#if 0 /* 1. 创建不可变数组 */
NSArray *arr1 = [[NSArray alloc] initWithObjects:@"Apple", @"三星", @"小米", nil];
/* 2. 获取元素个数 */
NSLog(@"%lu", arr1.count);
/* 3. 根据下标获取对象 */
NSLog(@"%@", [arr1 objectAtIndex:1]);
/* 4. 遍历数组 */
for (int i = 0; i < arr1.count; i++) {
NSLog(@"%@", [arr1 objectAtIndex:i]);
}
/* 示例: 查看数组是否有"三星" */
for (int i = 0; i < arr1.count; i++) {
NSString *str = [arr1 objectAtIndex:i];
if ([str isEqualToString:@"三星"]) {
NSLog(@"咦~ 三星!");
}
}
/* 5. 获取对象在数组中的索引值
* "小米" 在数组中的索引值
*/
NSLog(@"%lu", [arr1 indexOfObject:@"小米"]);
#endif
#pragma mark ** 可变数组
#if 0 /* 1. 创建可变数组 */
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@"Apple", @"三星", @"小米", nil];
NSMutableArray *mArr2 = [NSMutableArray arrayWithArray:mArr];
/* 2. 插入元素
* 在"三星"后面插入"华为"
*/
[mArr2 insertObject:@"华为" atIndex:2];
// for (int i = 0; i < mArr2.count; i++) {
// NSLog(@"%@", [mArr2 objectAtIndex:i]);
// }
/* 添加元素
* 添加"HTC"
*/
[mArr2 addObject:@"HTC"];
// for (int i = 0; i < mArr2.count; i++) {
// NSLog(@"%@", [mArr2 objectAtIndex:i]);
// }
/* 数组嵌套 */
// 方法1
NSMutableArray *mArr3 = [NSMutableArray arrayWithObjects:mArr, mArr2, nil];
// for (int i = 0; i < mArr3.count; i++) {
// for (int j = 0; j < [[mArr3 objectAtIndex:i] count]; j++) {
// NSLog(@"%@", [[mArr3 objectAtIndex:i] objectAtIndex:j]);
// }
// }
// 方法2
// for (int i = 0; i < mArr3.count; i++) {
// NSMutableArray *arr = [mArr3 objectAtIndex:i];
// for (int j = 0; j < arr.count; j++) {
// NSLog(@"%@", [arr objectAtIndex:j]);
// }
// }
/* 删除元素 */
// [mArr2 removeObject:@"HTC"];
// [mArr2 removeObjectAtIndex:0];
// for (int i = 0; i < mArr2.count; i++) {
// NSLog(@"%@", [mArr2 objectAtIndex:i]);
// }
/* 替换元素 */
// [mArr2 replaceObjectAtIndex:4 withObject:@"魅族"];
// for (int i = 0; i < mArr2.count; i++) {
// NSLog(@"%@", [mArr2 objectAtIndex:i]);
// }
/* 交换指定位置的两个元素 */
[mArr2 exchangeObjectAtIndex:0 withObjectAtIndex:4];
for (int i = 0; i < mArr2.count; i++) {
NSLog(@"%@", [mArr2 objectAtIndex:i]);
}
#endif
三、值对象
Objective-C的数组只能存放对象,如果要存储基本数据类型或结构体类型,就需要使用值对象将基本数据类型或结构体类型转换为对象,再将对象存入数组。如果要从数组中读取基本数据类型或结构体类型,应先取出对象,再将对象还原为整型或结构体。
NSNumber
数值对象,完成基本数据类型和对象类型的转换。即基本数据类型(int,float,double,char,NSInteger,CGFloat等)转换为NSNumber,NSNumber转换为基本数据类型。
#pragma mark - NSNumber
#if 0
int a = 100;
float f = 3.1f;
char ch = 'A';
// NSMutableArray *mArr = [NSMutableArray arrayWithObjects:a, f, ch, nil]; // 尝试基本数据类型直接存入数组, 报错
/* 将各种类型转换为值对象 NSNumber */
NSNumber *num1 = [NSNumber numberWithInt:a];
NSNumber *num2 = [NSNumber numberWithFloat:f];
NSNumber *num3 = [NSNumber numberWithChar:ch];
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:num1, num2, num3, nil];
/* NSNumber 转换为基本数据类型 */
int a1 = [num1 intValue];
float f1 = [num2 floatValue];
char ch1 = [num3 charValue];
#endif
NSValue
结构体(NSRange等)、指针等类型转换为NSValue。NSValue转换为结构体(NSRange等)、指针等。
#pragma mark - 知识点 NSValue
#if 0
/* 将结构体转换为对象 */
NSRange range = NSMakeRange(3, 5);
NSValue *value1 = [NSValue valueWithRange:range];
/* 将NSValue转换为结构体 */
NSRange rang1 = [value1 rangeValue];
NSLog(@"location: %lu", rang1.location);
NSLog(@"length: %lu", rang1.length);
#endif
四、总结
- 可变对象通常是不可变对象的子类,其包含父类所有方法,又具有自己独特的方法。
- 可变对象的增删改等都是对自身的操作,不可变对象的增删改都会生成新的对象,原对象不变。
- 数组只能存储对象类型的数据,数组元素有顺序,靠下标索引对象。
- NSNumber、NSValue主要是为了完成标量和对象的互转,便于与collection配合使用。
最后
以上就是碧蓝水杯为你收集整理的Objective-C_NSString、NSArray、NSNumber一、NSString和NSMutableString的使⽤二、NSArray和NSMutableArray的使用三、值对象四、总结的全部内容,希望文章能够帮你解决Objective-C_NSString、NSArray、NSNumber一、NSString和NSMutableString的使⽤二、NSArray和NSMutableArray的使用三、值对象四、总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复