您的位置:首页 > 其它

OC进阶(四)

2015-10-28 17:46 288 查看
1.协议的补充

#import <Foundation/Foundation.h>
//#import "baseProtocol.h"
@protocol baseProtocol;//只是告诉编译器有这个协议

@interface Dog : NSObject<baseProtocol>

@end


2.NSString的比较

#import <Foundation/Foundation.h>
void test(){

NSString *str1 = @"abc";   // a 97
NSString *str2 = @"abc";   // A 65

//取出每个字符的ASCII码值 ,比较ASCII码值大小
//compare方法比较大小
//compare 默认的区分大小写的
//compare 这个函数,不能增加条件
//        NSComparisonResult result = [str1 compare:str2];

//比较的时候,不区分大小写,参考字符的个数
NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];
//
switch (result) {
case NSOrderedAscending:
NSLog(@"str1 < str2 升序");
break;

case NSOrderedDescending:
NSLog(@"str1 > str2 降序");
break;

case NSOrderedSame:
NSLog(@"str1 == str2 ");
break;

default:
break;
}

}
int main(int argc, const char * argv[]) {
@autoreleasepool {

NSString *str1 = @"abc";   // a 97
NSString *str2 = @"abc";   // A 65
NSString *str3 = [NSString stringWithFormat:@"Abc"];

//地址的比较
// "==" 不能够判断字符串是否相等的

//判断字符串内容真正是否相等,使用是
//isEqualToString:
//注意:他是区分大小写的

if ([str1 isEqualToString:str3]) {
NSLog(@"相等");
}else{

NSLog(@"不相等");
}

}
return 0;
}


3.NSString的前后缀检查和搜索

#import <Foundation/Foundation.h>
/*
检测字符串的前缀和后缀
*/
void test(){

NSString *url = @"https://www.baidu.com";

//如何检测这个字符串是否是一个网址
//http://    https:// // 检测一个字符串的前缀是否以 http://  开头  或者 https:// 开头
// [str hasPrefix:@"要检测的内容"];

if([url hasPrefix:@"http://"]||[url hasPrefix:@"https://"]){

NSLog(@"是一个网址");
}else{

NSLog(@"这不是一个网址");
}

//检测字符串的后缀
// xxxx.jpg    判断 字符串的后缀是否是".jpg"
// xxxx.png
// xxxx.jpeg
// xxxx.gif
NSString *imgName = @"xxxxx.doc";
// [str hasSuffix:@"带检测的后缀"]
if([imgName hasSuffix:@".jpg"]||[imgName hasSuffix:@".png"]||[imgName hasSuffix:@".jpeg"]||[imgName hasSuffix:@".gif"]){

NSLog(@"是一个图片");
}else{

NSLog(@"这不是一个图片");
}

}
int main(int argc, const char * argv[]) {
@autoreleasepool {

//字符串的查找
// 查找某个字符串在另外一个字符串中首次出现的位置
//     0123456789
//1  @"asdaiosffsdafiosasdfsffitcastasdfasd"
//2  @"ios"
//   4   3

//  1 rangOfString 2
NSString *str1 =@"asdaiosffsdafiosasdfsffitcastasdfasd";
NSString *str2 =@"cjk";
// 字符串查找
// 查找2 在 1中首次出现的位置
// 如果查找到了,返回2在1中的位置和长度
// 如果查找不到,返回的信息:
//            location   特别大的数(NSNotFound) 最大的long类型的数
//            length     0
// range 结构体变量  NSRange 结构别名
NSRange range =  [str1 rangeOfString:str2];

//判断是否查找到了
if(range.location!=NSNotFound){
//range.location 表示字符串首次出现的位置
//range.length 字符串出现的长度(实质上就是子字符串的长度)
NSLog(@"%lu,%lu",range.location,range.length);
}else{

NSLog(@"在%@中没有找到这个字符串%@",str1,str2);
}

}
return 0;
}


4.NSRange的使用

#import <Foundation/Foundation.h>

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

NSRange range;  //range 结构体变量
NSRange *r ;    // r 结构体指针

//range变量的初始化方式
//1) 通过结构体变量访问成员
range.location = 3;
range.length = 2;

//2) 结构体变量整体赋值
range = (NSRange){5,3};
NSRange r2 = {4,5};  //最简单的

//3)
NSRange r3 = {.location = 3};  //只是给结构体变量中的.location 成员赋值

//4) OC中新增的
//NSMakeRange函数的作用给 NSRange结构体变量赋值
NSRange r4 = NSMakeRange(3, 3);

//查看结构体变量的值
NSLog(@"%ld,%ld",r4.location,r4.length);
//可以把结构体变量转换为 NSString类型
NSLog(@"%@",NSStringFromRange(r4));

}
return 0;
}


5.字符串的截取和替换

#import <Foundation/Foundation.h>
void test(){

//                01234567890
NSString *str = @"http://www.baidu.com";

//1) 从xx位置开始,到最后结束(包含xx这个位置的字符)
NSString *str1 = [str substringFromIndex:5];//从第5个之后
NSLog(@"str1 = %@",str1);

//2) 从开始位置,到xx位置结束(不包含xx这个位置)
NSString *str2 = [str substringToIndex:5];
NSLog(@"str2 = %@",str2);

//3) 截取一个范围 range
NSRange r1 = {3,4};
NSString *str3 = [str substringWithRange:r1];
NSLog(@"str3 = %@",str3);

}
/*

字符串截取的练习
*/
void test2(){

NSString *str = @"<iosios>wwoshizifuchuan</iosios>";
//  @">"  loc+1
NSUInteger loc = [str rangeOfString:@">"].location + 1;  //"w"得位置
//  @"</" loc
NSUInteger len = [str rangeOfString:@"</"].location - loc;  //要截取的字符的长度
// 构建 ruange
NSRange r2 = {loc,len};
// 截取
NSString *subStr = [str substringWithRange:r2];
NSLog(@"subStr = %@",subStr);
}

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

//字符串的替换
// @"asdfsdafasdfdasdfsa"  ----> a 替换成 "*"
// @" asdfasfd asdfsadf asdf asdfas asdf asdf asdfa"

NSString *str =@"asdfsdafasdfdasdfsa";

//        str stringByReplacingOccurrencesOfString:@"源字符串中的内容" withString:@"要替换成新的内容"
//把a替换成 *
NSString *newStr = [str stringByReplacingOccurrencesOfString:@"a" withString:@"*"];
NSLog(@"newStr = %@",newStr);

// 把空格给去掉
str =@" asdfasfd asdfsadf asdf asdfas asdf asdf asdfa";
newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"newStr = %@",newStr);

//将http:**ios.ios.cn*ios*images*content_25.jpg中的*替换为/
str =@"http:**ios.ios.cn*ios*images*content_25.jpg";
newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
NSLog(@"newStr = %@",newStr);

//  http:**  ios.ios.cn  *ios*images*  content_25.jpg
// 1) 空格 替换成空
// 2) 把*替换成/

str = @"http:**  ios.itcast.cn  *ios*images*  content_25.jpg";
newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];

newStr = [newStr stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
NSLog(@"newStr = %@",newStr);

}
return 0;
}


6.NSString的其他用法

#import <Foundation/Foundation.h>
//字符串转各种数值
void test(){

// str 是一个对象
NSString *str = @"1";
NSString *str2 = @"3.14";
//基本数据类型
int a = 10;

//str @"1" ----> 1
int b = [str intValue];   // @"1"  --> 1
b = [str2 intValue];      // @"3.14" ---> 3

a = a+b;  //a = 13

//这是把str2转换为 float值
float f1 = [str2 floatValue];  //@"3.14" --> 3.14f
f1 = f1 + a;

//把str2 转换为 double 值
double d1  = [str2 doubleValue]; // @"3.14" --> 3.14
//  3.14+ 3
d1 = d1 + b;

NSLog(@"a = %.2f",d1);

}
int main(int argc, const char * argv[]) {
@autoreleasepool {

NSString *str = @"a";
int value = [str intValue];
NSLog(@"value = %d",value);
//        //OC的字符串和 C的字符串互相转换问题
//        // char*  NSString
//        //1) C---->OC对象
//
//        char *s = "zhangsanfeng";
//        printf("%s\n",s);
//
//        //思路:创建一个OC的字符串对象,用C语言的字符串创建
//        NSString *str = [NSString stringWithUTF8String:s];
//        NSLog(@"str = %@",str);
//
//        //2) OC对象 --> C的字符串
//        NSString *str2 = @"zbz";
//        // 把str2 转 C的字符串
//        const char *s1 = [str2 UTF8String];
//        printf("s1 = %s\n",s1);

}
return 0;
}


7.NSMutableString 介绍和使用

#import <Foundation/Foundation.h>

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

//不可变: 字符串占用的 空间 和 字符串 的内容,都不能改变
//可变: 字符串占用的空间和字符串的内容,都可以改变

NSString *str = @"Jack";   //常量区
NSLog(@"str addr =%p",str);

str = @"Rose";
NSLog(@"str addr =%p",str);

//可变的字符串
NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];
NSLog(@"str2 addr =%p",str2);

[str2 appendString:@"&Rose"];
NSLog(@"str2 addr =%p",str2);

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

//思考:

//创建一个可变的空字符
NSMutableString *str3 = [NSMutableString string];
NSLog(@"str3 = %@",str3);
for (int i=0; i<10; i++) {
[str3 appendString:@" ios"];
}

NSLog(@"str3 = %@",str3);
}
return 0;
}


8.可变字符串的常见的方法

#import <Foundation/Foundation.h>
//可变字符串的常见的方法
void test(){

NSMutableString *str = [NSMutableString string];

//1) appendFormat 格式化的添加字符串
//                  0123456789
[str appendFormat:@"http://www.baidu.com/%d",100];

//str http://www.baidu.com/100 NSLog(@"%@",str);

//2) 删除字符串一部分内容
[str deleteCharactersInRange:NSMakeRange(3, 4)];
NSLog(@"%@",str);
//3) 插入一个字符串
[str insertString:@"p://" atIndex:3];
NSLog(@"%@",str);

//4) 替换字符串的一部分内容
[str replaceCharactersInRange:NSMakeRange(11, 5) withString:@"ios"];
NSLog(@"%@",str);
}
int main(int argc, const char * argv[]) {
@autoreleasepool {

//给可变的字符串赋值一个不可变的值
//错误:
// 1)给可变字符串赋值了不可变的值
// NSMutableString   =  NSString
//        NSMutableString *str = @"abc";
//        [str appendString:@"xxxx"];

NSMutableString *str = [NSMutableString stringWithFormat:@"abc"];

// 2)
//string 把原来字符串的内容给覆盖了
str.string = @"";   //用空覆盖

[str appendString:@"xxxxx"];

NSLog(@"str = %@",str);

}
return 0;
}


9.NSArray

#import <Foundation/Foundation.h>

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

//NSArray特点:
// 一旦创建成功,内容不可改变
// 只能存放OC对象

//1)创建一个空数组
NSArray *arr1 = [NSArray array];

//2)创建数组,只有一个元素
NSArray *arr2 = [NSArray arrayWithObject:@"1"];

//3)创建数组,有多个元素
// nil 表示数组赋值结束
// 常见写法
NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil];
NSLog(@"arr3 = %@",arr3);
//4)调用对象方法,创建数组
//nil Nil NULL  NSNULL
NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil];
NSLog(@"arr4 = %@",arr4);
//5)用一个数组可以创建另外一个数组
NSArray *arr5 = [NSArray arrayWithArray:arr3];
NSLog(@"arr5 = %@",arr5);

}
return 0;
}


10.NSArray常见的方法

#import <Foundation/Foundation.h>
//数组的常见的方法
void test(){

NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil];
NSLog(@"arr3 = %@",arr3);

//1)获取数组的长度  count获取数组的元素的个数
NSLog(@"%ld",arr3.count);

//2)根据下标,获取下标对应的对象
NSLog(@"%@",[arr3 objectAtIndex:3]);

//3)返回元素的下标
NSUInteger loc = [arr3 indexOfObject:@"three"];
NSLog(@"%ld",loc);

//4)数组中是否包含了某个元素
if([arr3 containsObject:@"four"]){

NSLog(@"包含此元素");

}else{

NSLog(@"不包含");
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {

//用简化的方式,来定义和访问数组元素
//1)用简化的方式,定义数组
//格式: @[ 数组元素 ]
NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];
NSLog(@"arr = %@",arr);

NSString *str =[arr objectAtIndex:2];
NSLog(@"%@",str);

//2)用简化的方式访问数组元素
str = arr[1];   //C语言形式的数组元素访问
NSLog(@"%@",str);

}
return 0;
}


11.NSArray的遍历方法

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//定义一个数组
NSArray *arr = @[@"one",@"two",@"three",@"four"];

//对数组进行遍历

//1) 普通的方式,通过下标访问
for (int i=0; i<arr.count; i++) {
NSLog(@"-> %@",arr[i]);
}

//2) 快速枚举法 for循环的增强形式
for (NSString * str in arr) {
NSLog(@"---> %@",str);
}

//3) 使用block的方式,进行访问
//                               数组元素            元素下标     是否停止
//stop:YES  会停止, stop:NO 不会停止
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

if(idx == 2){

*stop = YES;  //停止  // break;

}else{

NSLog(@"idx = %ld,obj = %@",idx,obj);
}

}];
}
return 0;
}


12.NSMutableArray的使用

#import <Foundation/Foundation.h>

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

//数组的使用
//1)创建数组
//i. 空数组
NSMutableArray *arr1 = [NSMutableArray array];
NSLog(@"%p",arr1);

//ii.创建的时候初始化一个元素
NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];

//iii.创建数组的时候,初始化多个元素
NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];

//IV . 创建一个数组,并且指定长度,
NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];

//2) 添加元素
[arr1 addObject:@"fengjie"];

NSLog(@"%p",arr1);
//插入元素到指定的位置
[arr1 insertObject:@"zbz" atIndex:0];

//3) 删除元素
//根据对象内容删除
//        [arr1 removeObject:@"zbz"];
//根据位置删除
//        [arr1 removeObjectAtIndex:1];
//全部删除
[arr1 removeAllObjects];

//4) 修改元素
//two --> four
[arr3 replaceObjectAtIndex:1 withObject:@"four"];
//four --> five
//更加简单地方法
arr3[1] = @"five";
NSLog(@"%@",arr3);

//5) 查找元素
BOOL isSearch = [arr3 containsObject:@"four"];
NSLog(@"%d",isSearch);

//6) 交换元素
// 1   2   3   4   5
// 5   2   3   4   1
//temp = a[0];
//a[0] = a[len-1];
//a[len-1] = temp;
NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];
// 可以交换数组元素
[arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
NSLog(@"%@",arr5);

}
return 0;
}


13.NSDictionary

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
//NSDictionary 不可变的,一旦创建,内容就不能添加\删除(不能改动)
//1)创建空字典
NSDictionary *dict1 = [NSDictionary dictionary];
// key    value
// zs ---> 张三

// ls ---> 李四
// mz ---> 码子
//2)创建只有一组键值对的字典
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"];

//3)创建多组键值对的字典
// value值,key值
NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2", nil];

//注意;
// 字典的key值和value值,都必须是对象

//4)快速创建一个字典
//@{,,key值:value值,,,};
//key值不能重复:
//如果重复了,也不会报错
//如果重复了,最后添加的将不能够保存到字典中

NSDictionary *dict4 = @{@"zs":@"zhaosi",@"zs":@"zhangsan",@"ls":@"lisi",@"bz":@"banzhang"};

NSLog(@"%@",dict4); //以%@格式打印字典,控制台输出一个{   }
//5)获取字典的长度
NSLog(@"%lu",dict4.count);
//6)根据key值取出value值
//      zs      zhaosi
//                                   key
NSString *str = [dict4 objectForKey:@"zs"];
NSLog(@"str = %@",str);

//7)字典的遍历问题
//第一步:获取所有的key
//第二步:根据key获取value
//        for(NSString *key in dict4){
//            NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);
//        }
//                                           key     value       stop
[dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

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

}];

}
return 0;
}


14.NSMutableDictionary

#import <Foundation/Foundation.h>

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

//1)可变字典的创建
NSMutableDictionary *dict1 = [NSMutableDictionary dictionary]; //创建空字典
NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithCapacity:3];

//2)给可变字典添加键值对

[dict1 setValue:@"zhaosi" forKey:@"ls"];//因为key值重复了,所以添加不上
[dict1 setValue:@"lisi" forKey:@"ls"];  // ls

[dict1 setValue:@"liuneng" forKey:@"ln"];
NSLog(@"%@",dict1);

//3)删除
//        [dict1 removeObjectForKey:@"ls"];
//        [dict1 removeAllObjects];
NSLog(@"%@",dict1);
//4)修改
//
[dict1 setObject:@"zhaosi" forKey:@"ls"];
//简写形式
dict1[@"ls"] = @"xxxxx";
NSLog(@"%@",dict1);
//5)查找
//获取所有的key值
NSArray *arr = [dict1 allKeys];
if([arr containsObject:@"ls"]){

NSLog(@"存在ls的key");
}

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: