前言

  • Xcode 7 对系统中常用的一系列容器类型都增加了泛型支持(),有了泛型后就可以指定容器类中对象的类型了。
  • 假如向泛型容器中加入错误的对象,编译器会报警告。
    • __covariant:协变性,子类型可以强转到父类型(里氏替换原则)。
    • __contravariant:逆变性,父类型可以强转到子类型。
  • 不指定泛型类型的对象可以和任意泛型类型转化,但指定了泛型类型后,两个不同类型间是不可以强转的,
  • 假如你希望主动控制转化关系,就需要使用泛型的协变性和逆变性修饰符。

1、迭代器

NSArray *arr = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil]; // 创建数组 正序 迭代器
NSEnumerator *arrEnumer1 = [arr objectEnumerator]; // 创建数组 反序 迭代器
NSEnumerator *arrEnumer2 = [arr reverseObjectEnumerator]; // 创建字典 key 迭代器
NSEnumerator *dicKeyEnumer = [dic keyEnumerator]; // 创建字典 对象 迭代器
NSEnumerator *dicObjEnumer = [dic objectEnumerator]; // 获取迭代器中下一个对象
id obj = [arrEnumer1 nextObject]; // 获取迭代器中所有对象
NSArray *array = [arrEnumer2 allObjects];

2、数组用迭代器遍历

NSArray *array = [NSArray arrayWithObjects:@"bei", @"jing", @"huan", @"ying", @"nin", nil];

// 获取数组的正序迭代器
NSEnumerator *enu1 = [array objectEnumerator]; // 获取数组的反序迭代器
NSEnumerator *enu2 = [array reverseObjectEnumerator]; // 遍历数组
id obj = nil; // 正序,获取下一个需要遍历的元素
while (obj = [enu1 nextObject]) {
NSLog(@"%@", obj);
} // 反序,获取下一个需要遍历的元素
while (obj = [enu2 nextObject]) {
NSLog(@"%@", obj);
}

3、集合用迭代器遍历

NSSet *set = [NSSet setWithObjects:@5, @23, @3, @8, @21, @33, @18, nil];

NSEnumerator *enu = [set objectEnumerator];

id obj = nil;

while (obj = [enu nextObject]) {
NSLog(@"%@", obj);
}

4、字典用迭代器遍历

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];

// key 迭代器
NSEnumerator *keyEnumer = [dic keyEnumerator]; id key = nil;
while (key = [keyEnumer nextObject]) {
NSLog(@"%@ = %@", key, [dic objectForKey:key]);
} // 对象迭代器
NSEnumerator *objEnumer = [dic objectEnumerator]; id obj = nil;
while (obj = [objEnumer nextObject]) {
NSLog(@"%@", obj);
}

NSEnumerator迭代器的更多相关文章

  1. iOS - OC NSEnumerator 迭代器

    前言 @interface NSEnumerator<ObjectType> : NSObject <NSFastEnumeration> Xcode 7 对系统中常用的一系列 ...

  2. iOS - Swift NSEnumerator 迭代器

    前言 public class NSEnumerator : NSObject, NSFastEnumeration 1.迭代器 let arr:NSArray = ["bei", ...

  3. objective-C学习笔记(八) 集合类型 Collection Types

    OBJC的集合类型: 1.数组 Array 2.Set 3.键值对 Dictionary 数组:OC中的数组被定义为class,引用类型.索引从0开始,访问越界会抛出运行时异常. NSArray的元素 ...

  4. Objective-C中NSArray的基本用法示例

    NSArray的一些用法 NSArray只允许装OC对象,并且不能装空值,空代表数组元素的结束 #pragma mark - NSArray的基本用法 // 创建一个空数组 NSArray *arra ...

  5. iOS开发系统类功能划分

    0.OC语法基础 CHOCBase Object C语法学习笔记(一) Object C语法学习笔记(二) 1.UI类 自定义控件程序运行流程 setNeedsLayOut和setNeedsDispl ...

  6. CHNS类

    NS类集合介绍 1.常用部分 NSDictionary NSString NSArray 数组 NSTimer 定时器 NSRange 范围 NSNotification 2.网络相关 NSURLCo ...

  7. 快速枚举的迭代器类NSEnumerator

    另外,OC中有一个专门的快速枚举的迭代器类NSEnumerator,这个类的使用方法如下: //得到一个对应的enumerator对象  NSEnumerator * enumerator = [se ...

  8. iOS设计模式之迭代器模式

    迭代器模式 基本理解 迭代器模式(Iterrator):提供一个方法顺序访问一个聚合对象中的各个元素,而又不暴露该元素的内部表示. 当你访问一个聚合对象,而且不管这些对象是什么都需要遍历的时候,你就应 ...

  9. OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)

    //一: 迭代器 //数组 NSArray *arr=@[@"1",@"2",@"3",@"4",@"5&qu ...

随机推荐

  1. [Android]异步任务AsyncTask使用解析

    AsyncTask主要用来更新UI线程,比较耗时的操作可以在AsyncTask中使用. AsyncTask是个抽象类,使用时需要继承这个类,然后调用execute()方法.注意继承时需要设定三个泛型P ...

  2. AJAX流程 代码

    var xml =      window.XMLHttpRequest ?new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHT ...

  3. Mybites和hibernate的优缺点和区别

    Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R mapping框架.目前属于apache的 ...

  4. python学习——练习题(1)

    """ 题目:有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? """ import itertools d ...

  5. 「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-12/ 小程序的模块化,把砖磊成一个墩子,用的时候把整个墩子移走.js更好的调用,应用更加公用化.源 ...

  6. 虚拟机之 LAMP

    LAMP 就是Linux apache mysql php 一.下载: 安装下载工具 yum install wget -y mysql:5.5.47 wget http://mirrors.sohu ...

  7. Visual C++ Samples-------------Code Project

    https://msdn.microsoft.com/en-us/library/hyds2fy1(v=vs.80).aspx

  8. FFmpeg新版本(2016年10月份以后) 支持硬件解码

    FFmpeg provides a subsystem for hardware acceleration. Hardware acceleration allows to use specific ...

  9. 【原创】6. 在MYSQL++中实现SQL语法中的NULL

    这次要说明的是在MYSQL++中为了实现SQL中的NULL而做出的一系列的举措.我的感觉是Null<T, B>类型通常出现在SSQLS和template Query中比较多. 1. 什么是 ...

  10. pandas dataframe 满足条件的样本提取

    pandas 的dataframe 对 数据查询可以通过3种方式 . 预备知识: 1. pandas 的索引和label都是从0开始的计数的 2. 时间切片都是左闭右开的. [5:6,:]  只会输出 ...