复制代码
let swiftyArray = foundationArray as AnyObject[]
if let downcastedSwiftArray = swiftArray as? UIView[] {
// downcastedSwiftArray contains only UIView objects
}
你也可以在for循环中将NSArray对象定向地强制转换为特定类型的Swift数组:
复制代码
for aView: UIView! in foundationArray {
// aView is of type UIView
}
注意:这种转换是强制转换,如果转换不成功则会在运行时产生错误信息。
当你从 Swift 数组转换为NSArray对象时,Swift 数组里的元素必须是属于AnyObject的。例如,一个Int[]类型的 Swift 数组包含Int结构的元素。Int类型并不是一个类的实例,但由于Int类型转换成了NSNumber类,Int类型属于AnyObject类型的。因此,你可以将一个Int[]类型的Swift数组转换为NSArray对象。如果 Swift 数组里的一个元素不属于AnyObject类型,那么在运行时就会产生错误。
你也可以从 Swift 数组中创建一个NSArray对象。当你将一个常量或变量定义为一个NSArray对象并分配一个数组给它作为实例变量时,Swift 将会创建 NSArray对象,而不是 Swift 数组。
复制代码let schoolSupplies: NSArray = ["Pencil", "Eraser", "Notebkko"]
// schoolSupplies is an NSArray object containing NSString objects
上面的例子中,Swift 数组包含包含三个String字符串。由于从String类型转换为NSString类,数组字面量被转换成一个NSArray对象,并成功分配给schoolSupplies变量。
当您在 Objective-C 代码中使用 Swift 类或者协议时,接入的API会将全部所有类型的Swift数组代替为NSArray。若您将一个NSArray对象传递给Swift的API并要求数组元素为一个新的类型,运行时就会产生错误。如果 Swift API 返回一个不能被转换为NSArray类型的 Swift 数组,错误也会随之产生。
Foundation数据类型
Swift 也提供一种简单便捷的覆盖方法来连接定义在 Foundation 框架中的数据类型。在NSSize和NSPoint中使用覆盖方法,在剩下的 Swift 语言中,你能在它的句法中感受到自然和统一。比如,你可以使用如下语法创建一个NSSize类型的结构:








