19.3 数组类
在Foundation框架中,数组被封装成为类,数组有两种:NSArray
不可变数组类和NSMutableArray
可变数组类。
19.3.1 NSArray
类
NSArray
有很多方法,下面总结常用的属性和方法。
-initWithArray:
构造器,通过指定Array
参数构造NSArray
对象。-count
返回当前数组的长度。-objectAtIndex:
按照索引返回数组中的元素。-contaiNSObject:
是否包含某一元素。
下面看一个NSArray
数组的示例代码:
import Foundation
let 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 Foundation
var 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 NSString
NSLog("%i %@", i, day)
}
for item : AnyObject in weeksNames {
var day = item as NSString
NSLog("%@", 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
数据。