#T21SortingDescriptor
一个用于轻松使用排序描述符的帮助类型。
T21SortingDescriptorSwift 提供了一个帮助类型,用于以轻松的方式使用排序描述符。排序描述符还可以组合以创建不同的排序级别。
Swift 标准语言不包括 SortDescriptor 类型。我们可以使用 Objective-C API 的 NSSortDescrptor 类,但这将导致我们必须使用 NSArray 来处理我们的集合(导致代码中丑陋的类型转换以及其他问题)。
安装
T21SortingDescriptorSwift 通过 Carthage,CocoaPods 或 Swift 包管理器 提供。
Carthage
要使用 Carthage 安装 T21SortingDescriptorSwift,请将以下行添加到您的 Cartfile
中。
github "worldline-spain/T21SortingDescriptorSwift"
然后运行 carthage update --no-use-binaries
命令或只是运行 carthage update
。有关 Carthage 的安装和使用详情,请访问 其项目页面。
CocoaPods
要使用 CocoaPods 安装 T21SortingDescriptorSwift,请将以下行添加到您的 Podfile
中。
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!
pod 'T21SortingDescriptorSwift'
然后运行 pod install
命令。有关 CocoaPods 的安装和使用详情,请访问 其官方网站。
Swift 包管理器
要使用苹果的 Swift 包管理器进行集成,请将以下内容作为依赖项添加到您的 Package.swift
文件中。
.package(url: "https://github.com/worldline-spain/T21SortingDescriptorSwift.git", .upToNextMajor(from: "2.3.0"))
有关 Swift 包管理器的安装和使用详情,请访问其官方网站。
如何使用
简单 SortDescriptor
使用第一个函数参数获取要比较的所需键,然后使用比较函数作为第二个参数创建一个简单的 SortDescriptor。此方法在从对象获取键时提供了很大的灵活性。
在下面的示例中,我们将对人员的数组进行排序。
public class Person {
public var age: Int
public var name: String
public init(_ age: Int, _ name: String) {
self.age = age
self.name = name
}
}
let personsToSort = [Person(29,"Tom"),Person(10,"Jack"),Person(54,"Ana"),Person(24,"Maria")]
let sortingDescriptor: SortDescriptor<Person> = sortDescriptor({ $0.age })
let personsSortedByAge = personsToSort.sorted(by: sortingDescriptor)
/* Output
Jack: 10
Maria: 24
Tom: 29
Ana: 54
*/
组合 SortDescriptor
以下示例中,我们将两个不同的排序描述符合并以应用两层排序。
let personsToSort = [Person(29,"Tom"),Person(10,"Jack"),Person(54,"Ana"),Person(24,"Maria"),Person(24,"Aurora"),Person(29,"Daniel")]
let sortingDescriptorByAge: SortDescriptor<Person> = sortDescriptor({ $0.age }, >)
let sortingDescriptorByName: SortDescriptor<Person> = sortDescriptor(key: { $0.name }, String.localizedCaseInsensitiveCompare)
let combinedSortingDescriptor = combine(sortDescriptors: [sortingDescriptorByAge,sortingDescriptorByName])
let personsSortedByAgeAndName = personsToSort.sorted(by: combinedSortingDescriptor)
/* Output
Ana: 54
Daniel: 29
Tom: 29
Aurora: 24
Maria: 24
Jack: 10
*/
作者
- 埃洛伊·古兹曼·塞隆 - 初次尝试
- 埃德温·佩纳 - 初次尝试
- 萨尔瓦多·马丁 - 初次尝试
- 马克奥斯·莫利罗 - Swift 5 集成,Carthage 和 Swift 包管理器集成
- 阿南·萨迪亚 - Swift 5 集成,Carthage 和 Swift 包管理器集成
有关参与此项目的贡献者列表请查看。
许可协议
本项目遵循Apache 2.0 许可协议 - 详细信息请参阅LICENSE.md文件
致谢
- 向Worldline Spain iOS开发团队致敬。