23、Swift 集合类型全解析

Swift 集合类型全解析

1. NSArray 与类型信息

在 Swift 中,NSArray 本身不携带其包含元素的类型信息。不过,从 Xcode 7 开始,Objective - C 语言进行了修改,使得 NSArray、NSDictionary 或 NSSet(这三种集合类型可与 Swift 桥接)的声明能够包含元素类型信息,Objective - C 称之为轻量级泛型。所以,大多数情况下,从 Cocoa 接收到的数组能被正确类型化。

例如,下面这段优雅的代码以前是无法实现的:

let arr = UIFont.familyNames.map {
    UIFont.fontNamesForFamilyName($0)
}

这段代码的结果是一个字符串数组的数组,按字体族列出了所有可用的字体。之所以能实现,是因为 Swift 现在认为这两个 UIFont 类方法返回的是字符串数组。以前,这些数组是无类型的,需要手动将其转换为字符串数组。

然而,轻量级泛型并非总是存在。比如,可能会使用 NSArray 的 init(contentsOf:) 方法从磁盘上的 .plist 文件中读取数组,或者从 UserDefaults 中检索数组,甚至可能会处理尚未更新以使用轻量级泛型的 Objective - C API。在这种情况下,最终会得到一个普通的 NSArray 或一个包含 Any 类型的 Swift 数组。这时,通常需要将这个数组转换为某种特定的 Swift 类型的数组。

以下是一个 Objective - C

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值