有没有必要,以避免斯威夫特Array
。
它与NSArray
这两个方向桥接,因此对于更多类型安全的代码,最好使用Swift数组完成工作,并且只在需要与ObjC API进行互操作时进行桥接。 (在大部分进口的API,雨燕自动转换NSArray
到[AnyObject]
,所以你甚至都不需要经常弥合。)
假设persons
阵列是[AnyObject]
你从其他API了,你可以减少对首先铸造阵列相对于其他类型的答案铸造量:
let sortedPersons = sorted(persons as [Person]) { $0.name < $1.name }
// sortedPersons has inferred type [Person]
此外,由于您使用的是比较块只排序您Person
类的特定属性,你可以做的更好,以使用排序描述符:
let sortedPersons = (persons as NSArray).sortedArrayUsingDescriptors([
NSSortDescriptor(key: "name", ascending: true)
])
(该persons as NSArray
部分可能不是必要的,如果persons
从ObjC API来了。)
根据Person
类是如何实现的,与描述排序可以产生在后端更有效的排序。例如,如果它是一个核心数据管理对象,则使用描述符排序可能会产生一个SQL查询,该查询在数据库中执行得很快,并且使用很少的内存,而使用比较器闭包进行排序需要实例化数据库中的每个对象,以评估每个对象。
'NSComparisonResult'现在'ComparisonResult'。 – ThomasW 2018-02-19 05:27:11