19.3 数组类

在Foundation框架中,数组被封装成为类,数组有两种:NSArray不可变数组类和NSMutableArray可变数组类。

19.3.1 NSArray

NSArray有很多方法,下面总结常用的属性和方法。

  • -initWithArray: 构造器,通过指定Array参数构造NSArray对象。

  • -count 返回当前数组的长度。

  • -objectAtIndex: 按照索引返回数组中的元素。

  • -contaiNSObject: 是否包含某一元素。

下面看一个NSArray数组的示例代码:

  1. import Foundation
  2. let weeksArray = ["星期一","星期二", "星期三", "星期四", "星期五", "星期六","星期日"]
  3. var weeksNames:NSArray = NSArray(Array: weeksArray)
  4. NSLog("星期名字")
  5. NSLog("==== ====")
  6. for vari = 0; i<weeksNames.count; i++ {
  7. var obj : AnyObject = weeksNames.objectAtIndex(i)
  8. var day = obj as NSString
  9. NSLog("%i %@", i, day)
  10. }
  11. for item : AnyObject in weeksNames {
  12. var day = item as NSString
  13. NSLog("%@", day)
  14. }

上述代码第①行是声明并初始化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类型。

输出结果如下:

  1. 2014-07-06 18:04:16.129 PlaygroundStub_OSX[2477:303] 星期名字
  2. 2014-07-06 18:04:16.132 PlaygroundStub_OSX[2477:303] ==== ====
  3. 2014-07-06 18:04:16.139 PlaygroundStub_OSX[2477:303] 0 星期一
  4. 2014-07-06 18:04:16.144 PlaygroundStub_OSX[2477:303] 1 星期二
  5. 2014-07-06 18:04:16.151 PlaygroundStub_OSX[2477:303] 2 星期三
  6. 2014-07-06 18:04:16.156 PlaygroundStub_OSX[2477:303] 3 星期四
  7. 2014-07-06 18:04:16.162 PlaygroundStub_OSX[2477:303] 4 星期五
  8. 2014-07-06 18:04:16.167 PlaygroundStub_OSX[2477:303] 5 星期六
  9. 2014-07-06 18:04:16.172 PlaygroundStub_OSX[2477:303] 6 星期日
  10. 2014-07-06 18:04:16.178 PlaygroundStub_OSX[2477:303] 星期一
  11. 2014-07-06 18:04:16.181 PlaygroundStub_OSX[2477:303] 星期二
  12. 2014-07-06 18:04:16.184 PlaygroundStub_OSX[2477:303] 星期三
  13. 2014-07-06 18:04:16.188 PlaygroundStub_OSX[2477:303] 星期四
  14. 2014-07-06 18:04:16.192 PlaygroundStub_OSX[2477:303] 星期五
  15. 2014-07-06 18:04:16.195 PlaygroundStub_OSX[2477:303] 星期六
  16. 2014-07-06 18:04:16.199 PlaygroundStub_OSX[2477:303] 星期日

19.3.2 NSMutableArray

NSMutableArrayNSArray的子类,它有很多方法和属性,下面总结其常用的方法和属性。

  • -addObject: 在数组的尾部追加一个元素。

  • -insertObject:atIndex: 按照索引插入一个元素。

  • -removeObjectAtIndex: 移除特定索引的元素。

  • -removeObject: 移除特定元素。

  • -initWithCapacity: 实例构造方法。

下面看NSArray数组的示例代码:

  1. import Foundation
  2. var weeksNames : NSMutableArray = NSMutableArray(capacity: 3)
  3. weeksNames.addObject("星期一")
  4. weeksNames.addObject("星期二")
  5. weeksNames.addObject("星期三")
  6. weeksNames.addObject("星期四")
  7. weeksNames.addObject("星期五")
  8. weeksNames.addObject("星期六")
  9. weeksNames.addObject("星期日")
  10. NSLog("星期名字")
  11. NSLog("==== ====")
  12. for vari = 0; i<weeksNames.count; i++ {
  13. var obj : AnyObject = weeksNames.objectAtIndex(i)
  14. var day = obj as NSString
  15. NSLog("%i %@", i, day)
  16. }
  17. for item : AnyObject in weeksNames {
  18. var day = item as NSString
  19. NSLog("%@", day)
  20. }

第①行代码是通过构造器-initWithCapacity:实例化NSMutableArray,其中capacity是外部参数名,capacity为容器大小,也就是数组中初始的单元。第②行~第③行是添加元素到weeksNames数组,如果超过了容量会自动追加的。

19.3.3 NSArrayArray之间的关系

NSArrayArray之间的关系如同NSStringString之间的关系,Swift在底层能够将它们自动地桥接起来,一个NSArray对象桥接之后的结果是[AnyObject]数组(保存AnyObject元素的Array数组)。

下面我们看一个使用ArrayNSArray的示例:

  1. import Foundation
  2. let foundationString : NSString = "alpha bravo charlie delta echo"
  3. let foundationArray : NSArray = foundationString.componentsSeparatedByString(" ")
  4. let swiftArray = foundationArray
  5. for item in foundationArray {
  6. printin(item) //输出类型是NSString ⑥
  7. }
  8. for item in foundationArray as [String] {
  9. printin(item) //输出类型是String ⑧
  10. }
  11. for item in swiftArray {
  12. printin(item) //输出类型是AnyObject ⑨
  13. }
  14. for item in swiftArray as [String] {
  15. printin(item) //输出类型是String ⑩
  16. }

代码第①行是引入Foundation。第②行代码声明并初始化NSString字符串,第③行代码使用NSStringcomponentsSeparatedByString方法,该方法可以使用指定的字符分割字符串,返回NSArray数组。

第④行代码是将NSArray数组赋值给Array数组,这个过程也发生了类型转换,不仅是NSArrayArray的转换,而且它们的内部元素也从NSString转换为AnyObject

第⑤行代码是遍历foundationArray集合,第⑥行代码输出的是NSString数据。

第⑦行代码是将数组foundationArray集合转换为[String]数组,然后遍历集合,第⑧行代码输出的是String数据。

第⑨行代码输出的是AnyObject数据。第⑩代码输出的是String数据。