19.3 数组类
在Foundation框架中,数组被封装成为类,数组有两种:NSArray不可变数组类和NSMutableArray可变数组类。
19.3.1 NSArray类
NSArray有很多方法,下面总结常用的属性和方法。
-initWithArray:构造器,通过指定Array参数构造NSArray对象。-count返回当前数组的长度。-objectAtIndex:按照索引返回数组中的元素。-contaiNSObject:是否包含某一元素。
下面看一个NSArray数组的示例代码:
import Foundationlet weeksArray = ["星期一","星期二", "星期三", "星期四", "星期五", "星期六","星期日"] ①var weeksNames:NSArray = NSArray(Array: weeksArray) ②NSLog("星期名字")NSLog("==== ====")for vari = 0; i<weeksNames.count; i++ { ③var obj : AnyObject = weeksNames.objectAtIndex(i) ④var day = obj as NSString ⑤NSLog("%i %@", i, day)}for item : AnyObject in weeksNames { ⑥var day = item as NSString ⑦NSLog("%@", day)}
上述代码第①行是声明并初始化Swift的Array数组类型常量weeksArray,第②行代码是通过weeksArray常量创建并初始化NSArray数组类型对象weeksNames。
第③行代码是采用的for循环遍历weeksNames数组,第④行代码使用objectAtIndex(i)方法按照索引从数组中取出元素,取值的元素是AnyObject类型。第⑤行代码将AnyObject类型的obj变量转换为NSString,因为本来weeksNames数组中的元素就是NSString类型的。
第⑥行代码是采用for in循环遍历weeksNames数组,第⑦行代码var day = item as NSString是将元素转换为NSString类型。
输出结果如下:
2014-07-06 18:04:16.129 PlaygroundStub_OSX[2477:303] 星期名字2014-07-06 18:04:16.132 PlaygroundStub_OSX[2477:303] ==== ====2014-07-06 18:04:16.139 PlaygroundStub_OSX[2477:303] 0 星期一2014-07-06 18:04:16.144 PlaygroundStub_OSX[2477:303] 1 星期二2014-07-06 18:04:16.151 PlaygroundStub_OSX[2477:303] 2 星期三2014-07-06 18:04:16.156 PlaygroundStub_OSX[2477:303] 3 星期四2014-07-06 18:04:16.162 PlaygroundStub_OSX[2477:303] 4 星期五2014-07-06 18:04:16.167 PlaygroundStub_OSX[2477:303] 5 星期六2014-07-06 18:04:16.172 PlaygroundStub_OSX[2477:303] 6 星期日2014-07-06 18:04:16.178 PlaygroundStub_OSX[2477:303] 星期一2014-07-06 18:04:16.181 PlaygroundStub_OSX[2477:303] 星期二2014-07-06 18:04:16.184 PlaygroundStub_OSX[2477:303] 星期三2014-07-06 18:04:16.188 PlaygroundStub_OSX[2477:303] 星期四2014-07-06 18:04:16.192 PlaygroundStub_OSX[2477:303] 星期五2014-07-06 18:04:16.195 PlaygroundStub_OSX[2477:303] 星期六2014-07-06 18:04:16.199 PlaygroundStub_OSX[2477:303] 星期日
19.3.2 NSMutableArray类
NSMutableArray是NSArray的子类,它有很多方法和属性,下面总结其常用的方法和属性。
-addObject:在数组的尾部追加一个元素。-insertObject:atIndex:按照索引插入一个元素。-removeObjectAtIndex:移除特定索引的元素。-removeObject:移除特定元素。-initWithCapacity:实例构造方法。
下面看NSArray数组的示例代码:
import Foundationvar weeksNames : NSMutableArray = NSMutableArray(capacity: 3) ①weeksNames.addObject("星期一") ②weeksNames.addObject("星期二")weeksNames.addObject("星期三")weeksNames.addObject("星期四")weeksNames.addObject("星期五")weeksNames.addObject("星期六")weeksNames.addObject("星期日") ③NSLog("星期名字")NSLog("==== ====")for vari = 0; i<weeksNames.count; i++ {var obj : AnyObject = weeksNames.objectAtIndex(i)var day = obj as NSStringNSLog("%i %@", i, day)}for item : AnyObject in weeksNames {var day = item as NSStringNSLog("%@", day)}
第①行代码是通过构造器-initWithCapacity:实例化NSMutableArray,其中capacity是外部参数名,capacity为容器大小,也就是数组中初始的单元。第②行~第③行是添加元素到weeksNames数组,如果超过了容量会自动追加的。
19.3.3 NSArray与Array之间的关系
NSArray与Array之间的关系如同NSString与String之间的关系,Swift在底层能够将它们自动地桥接起来,一个NSArray对象桥接之后的结果是[AnyObject]数组(保存AnyObject元素的Array数组)。
下面我们看一个使用Array和NSArray的示例:
import Foundation ①let foundationString : NSString = "alpha bravo charlie delta echo" ②let foundationArray : NSArray = foundationString.componentsSeparatedByString(" ") ③let swiftArray = foundationArray ④for item in foundationArray { ⑤printin(item) //输出类型是NSString ⑥}for item in foundationArray as [String] { ⑦printin(item) //输出类型是String ⑧}for item in swiftArray {printin(item) //输出类型是AnyObject ⑨}for item in swiftArray as [String] {printin(item) //输出类型是String ⑩}
代码第①行是引入Foundation。第②行代码声明并初始化NSString字符串,第③行代码使用NSString的componentsSeparatedByString方法,该方法可以使用指定的字符分割字符串,返回NSArray数组。
第④行代码是将NSArray数组赋值给Array数组,这个过程也发生了类型转换,不仅是NSArray到Array的转换,而且它们的内部元素也从NSString转换为AnyObject。
第⑤行代码是遍历foundationArray集合,第⑥行代码输出的是NSString数据。
第⑦行代码是将数组foundationArray集合转换为[String]数组,然后遍历集合,第⑧行代码输出的是String数据。
第⑨行代码输出的是AnyObject数据。第⑩代码输出的是String数据。
