字符串数组和字典

【字段的权限】

【注】在类中声明字段,可以为字段添加权限

@private 私有权限

@protected 保护权限

@public 公有权限

@interface Father : NSObject

{

@private    //私有权限修饰的变量,不能被子类继承,不能被外部函数访问。

    int a;

@protected  //缺省权限 保护权限修饰的变量,可以被子类继承,不能被外部函数访问。

    int b;

    int c;

@public     //公有权限修饰的变量,可以被子类继承,可以被外部函数访问。

    int d;

}

@end

father->d = 9;

//保护成员,被继承了,仍然是保护成员

//公有成员,被继承了,仍然是公有成员

【注】

//实际工作中,根本不需要使用权限,都使用缺省的保护权限就可以了。

//如果你想要成员变量被外部函数访问,声明成属性。

//如果你想变量不被子类继承,不对外公开。声明在实现里。

@implementation Father

{

int x;

}

【方法的权限】

【注】

//OC中成员方法都是公有的,可以被继承,可以被外部方法访问。

//没有在接口中做声明的方法,这个方法不能被外部函数直接访问。

//通过不声明(或者仅在匿名类别中声明),我们模拟了私有方法,这个过程,有时被称为方法的私有化。

【注】下面情况,方法私有化不成功

1.父类公有的方法,子类重写,即使子类不声明,方法也是公有的。

2.在协议中声明的方法,遵从协议的对象,即使不声明,只实现,方法也是公有的

【另】方法的私有化,声明即外露,不声明即不外露,本没什么可记的。但是面试经常会被问到:OC能实现私有方法吗?可照上述方式回答。

【字符串】

【注】OC的程序,依托于基础类库Foundation.Foundation框架提供了很多官方类,其中有三个基础的数据结构。

【字符串】【数组】【字典】

堆中字符串    链表       哈希表

【注】OC兼容C的字符串,但是OC有自己的字符串,是一个类。声明的对象,既能存储一串字符,又能通过一些方法,管理存储的字符。

【另】OC程序乃至iOS程序中,所有的字符串管理,都交给这个类完成。

一.NSString(NextStep-> Cocoa)

二.字符串的常用方法

//字符串转其他类型数据

int ret = [str1 intValue];

    long long ret2 = [str1 longLongValue];

    double ret3 = [str1 doubleValue];

    NSInteger ret4 = [str1 integerValue];

1.返回字符串的长度

NSUInteger len = [str length];

2.返回单个字符

unichar c = [str characterAtIndex:3];

3.比较两个字符串的大小关系

BOOL ret = [str1 isEqualToString:str2];

NSComparisonResult ret2 = [str1 compare:str2];

4.查找子串的位置和范围

NSRange range = [str rangeOfString:@"粉刷"];

5.子串的提取

NSString * subStr1 = [str substringToIndex:5];

//开区间

NSString * subStr2 = [str substringFromIndex:5];

//闭区间

NSString * subStr3 = [str substringWithRange:range];

//提取字符串

//NSString不可修改,因此这里并不是截断字符串,只是取出原字符串的一部分,创建一个新的字符串,新字符串是原字符串的一部分,称为原字符串的字串

四.可变字符串

NSMutableString 继承自 NSString

1.凡是NSString的方法,NSMutableString都能用

2.凡是传参需要传入NSString * 传入NSMutableString *也行

【专有方法】

1.重置字符串内容

[str setString:@"0123456789"];

2.增 append  insert

[str appendString:@"9876543210"];  追加

[str appendFormat:@"%d %c %.2f", 34, ‘T‘, 2.34];

[str insertString:@"ABC" atIndex:3];

[str insertString:[NSString stringWithFormat:@“%.2f”,3.14] atIndex:3];

3.删 delete

[str deleteCharactersInRange:range];

4.改 replace

[str replaceCharactersInRange:range withString:@"XXXXXXXXXXXXXXX"];

//替换之前的字符串个数和替换之后的个数,长度可以不同。因为可变字符串是堆空间的对象,堆空间的大小可在运行时改变。

5.查 rangeOfString:

【数组】

//OC的数组用于存储对象的地址,结构更接近于C中的链表。

//OC使用C的数组存储大量的基础数据类型,OC的数组对象存储多个对象(地址)

//OC的数组类有两个

NSArray(数组) NSMutableArray(可变数组)

//作用管理大量的对象数据。

一.NSArray

【创建数组对象】

NSArray * array = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", dog, nil];

//构造方法的参数是任意对象的地址,不局限字符串。

//每个对象可以是不同类的对象。

//nil就是NULL NULL表示一般指针为空,nil表示对象指针为空。

//数组中只存储每个对象的地址,并不真的存储对象。

//所以,一个对象经常被添加到多个数组中,但还是一个对象。

//类似 void * array[n];

//用initWithObjects需要在末尾添加nil

//%@是打印任何对象

NSArray * array2 = @[@"One One", @"Two", @"Three", dog];

//Xcode 4.6 以后才能用

//打印数组,就是打印数组的每个元素

NSLog(@"%@", array);

【遍历数组】

//找出数组中元素个数

NSUInteger cnt = [array count];

//找到某个元素,返回某个元素的地址。

NSString * obj = [array objectAtIndex:1];

obj = array[1];

//xcode 4.6 以后

//直接打印数组不支持中文,先取出后打印支持中文

//id表示指向任何类型的指针,即泛型对象指针

//快速枚举法

for(id obj in array){

//循环的第一次obj指向数组第0个元素,第二次指向数组第1个元素。遍历结束后,会自动退出

NSLog(@“%@“,obj);}

//如果使用快速枚举法,则遍历过程中,不得修改数组元素个数和元素的顺序

【详见day3-数组-2】

//判断一个对象是否属于某个类

[obj isKindOfClass:[DeathKnight class]] == YES;

【常用方法】

//返回某个对象的位置(索引)

NSUInteger index = [array indexOfObject:dk2];

二.可变数组

//NSMutableArray : NSArray

//凡是NSArray的方法,NSMutableArray都能用。

//凡是传参传NSArray*,也可以传NSMutableArray*

//重置内容

[array setArray:@[@"One", @"Two"]];

//增

//追加

[array addObject:@"Four"];

//插入

[array insertObject:@"Four" atIndex:1];

//删

[array removeAllObjects];

[array removeLastObject];

//删除指定索引处元素

[array removeObjectAtIndex:1];

[array addObject:@"One"];

//传入地址,删除指定元素,如果传入的是字符串,删除所有和字符串相等的元素。

[array removeObject:@"One"];

//删除指定的对象,如果对象是一般对象,则需传入你想删除的对象的地址。如果对象是字符串,则只需传入跟你想删除的字符串相等的字符串即可

//改

//用某个对象,替换当前某索引处的元素

[array replaceObjectAtIndex:0 withObject:@"Five"];

//交换两个元素的位置

[array exchangeObjectAtIndex:0 withObjectAtIndex:2];

三.字符串分割

【字典】

//NSDictionary 和 NSMutableDictionary

//NSMutableDictionary : NSDictionary

//两个凡是

一.NSDictionary

//创建字典对象

//字典中的数据以键值对的形式存储

//@"One”是键值对的值(value), @“1”是键值对的键(key)

//字典的值是任意对象,键一般使用字符串

//字典的目的是通过键找到值。键是手段,值是目的。值是需要存储的数据,键仅仅是查找数据的索引

//字典采用哈希表存储数据,因此查找速度快,没有顺序,不存在第一键值对,第二键值对

//通过键计算一个哈希值,比如5,则将对应的值的地址存在哈希表的第5个格子里

//OC的字典不允许两个键值对拥有相同的键

//字典和数组一样,只储存对象的地址,不储存对象本身

NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", @"One",  @"4", nil];

NSDictionary * dict2 = @{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"};

//通过传入键,返回值的地址

NSString * value = [dict objectForKey:@"3"];

value = dict[@"3"];

//Xcode 4.6 以后

//如果没有对应的键,返回nil

//返回键值对总数

NSUInteger count = [dict count];

//返回所有的键

NSArray * keys = [dict allKeys];

//返回所有的值

NSArray * values = [dict allValues];

二.可变字典

//重置字典

[mutableDict setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"}];

       

//增

[mutableDict setObject:@"Four" forKey:@"4"];

       

//删

//通过键删除值

[mutableDict removeObjectForKey:@"3"];

//通过多个键,删除多个值

[mutableDict removeObjectsForKeys:@[@"1", @"2", @"3"]];

//删除所有键值对

[mutableDict removeAllObjects];

时间: 04-03

字符串数组和字典的相关文章

Swift - 1 (常量、变量、字符串、数组、字典、元组、循环、枚举、函数)

Swift 中导入类库使用import,不再使用<>,导入自定义不再使用"" import Foundation 1> 声明变量和常量 在Swift中使用 "let" 修饰一个常量,使用 "var" 修饰一个变量; let修饰常量的值是不可以更改的: var修饰的变量的值是可以更改的: 在声明常量和变量的时候可以使用表情符号.中文等命名常量名和变量名. Swift定义变量或者常量的时候,需要标识出变量或者常量的类型,如果不标识,

字符串 数组 字典 日期 数学常用方法

创建空字符串,给予赋值. NSString *astring = [[NSString alloc] init]; astring = @"This is a String!";   使用变量初始化 NSString *name = @"Ivan!"; NSString *astring = [[NSString stringWithFormat:@”My name is %@!”,name]];  判断是否包含某字符串 检查字符串是否以另一个字符串开头 - (BO

数组、字典转json串,不支持字符串

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构. 1.对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字.字符串.数组.对象几种. 2.数组:数组在js中是中括号“[]”括起来的内容,数据结构为

OC - 数组、字典、集合

数组是一个有序的集合,OC中的数组只能存储对象类型,对于对象的类型是没有限制的 NSArray:不可变数组 :对象创建好以后,数组中的元素个数不能发生变化 NSSMutableArray : 可变数组 : 对象创建好以后,数组中的元素可以灵活进行增删改操作 NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @123, @"monkey", nil]; 注意 : nil作为数组存放元素的结束标志,多

OC-Day4____数组与字典

2015.3.3 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //利用i值遍历数组 NSArray *array = [NSArray arrayWithObjects:@"one",@"two",@"three",@"four",@"five", n

Objective-C中把数组中字典中的数据转换成URL

可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是Map来存储键值对.下面我们将实现一个极为实用的小例子,网络请求有get和post方法,两种方法各有其优点.在表单提交时Post方法用的更多一些,URL传值则会用到Get方法.在用PHP编程的时候肯定会经常拼接url来传参或者请求,在IOS开发中会向服务器通过url请求一些数据,所以对url的拼接是少

Swift2.0(5)元组类型&数组类型&字典类型

元组类型 元组Tuple用来归纳多个归纳具有任意类型的相关联的值,如: var person = (30, "neusoft") print(person)     // (30, "neusoft") 该元组类型对象person的类型可以认为是:(Int, String) 如果想要获取元组中的某个数据,可以采用以下方式 方式一:可以将其中的数据关联到常量或变量中,如: let (age, name) = person print("age:\(age)

字典转数组 数组转字典

NSMutableArray *dicToArray = [NSMutableArray array]; NSMutableDictionary *arrayToDic = [NSMutableDictionary dictionary]; NSDictionary *dic = @{@"1":@"one",@"2":@"two",@"3":@"three"}; //字典转数组 [dic

IOS数组、字典、NSNumber 新写法—— @[]、@{}

IOS数组.字典.NSNumber 新写法—— @[].@{} //标准写法 NSNumber * number = [NSNumber numberWithInt:1]; NSArray * array = [NSArray arrayWithObjects:@"one", @"two", nil]; NSDictionary * dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1&quo