SwiftSortUtils
动机
这个库尝试让 Swift 中的比较和排序更加愉悦。它还允许你在 Swift 中复用旧的 NSSortDescriptor
实例。
示例
let somePeople: [Person] = ...
// Sort by a single comparable attribute
let ... = somePeople.sort(by: compareBy(\.firstname))
let ... = somePeople.sort(by: compareBy { $0.firstname })
let ... = somePeople.sort(by: compareBy(.descending, \.firstname))
let ... = somePeople.sort(byComparing: \.firstname)
let ... = somePeople.sort(byComparing: \.firstname, ordering: .descending)
// Sort by multiple attributes
let ... = somePeople.sort(by:
compareBy { $0.age } <|>
compareBy { $0.lastname } <|>
compareBy(\.firstname)
)
// With less cumbersome syntax:
let ... = somePeople.sort(by: \.age <|> \.firstname <|> \.lastname)
let ... = somePeople.sort(byComparing: [\.firstname, \.lastname]) // monomorphic
// Append any comparator function
let ... = somePeople.sort(by:
compareBy { $0.age } <|>
{ (p1, p2) in p1.wearsGlasses() && !p2.wearsGlasses() }
)
// Reverse compare functions
let ... = somePeople.sort(by:
compareBy(.descending) { $0.age } <|>
compareBy { $0.lastname } <|>
reverseComparator(compareBy(\.firstname)) // reverse any compare function
)
// Mix and match extractor and compare functions:
let ... = somePeople.sort(by:
compareBy(.descending, \.age) <|>
\.firstname <|>
\.lastname <|>
reverseComparator(myCompareFunction)
)
// Use an NSSortDescriptor
let ageSortDescriptor = NSSortDescriptor(key: "age", ascending: true)
let ... = somePeople.sort(ageSortDescriptor.toCompareFunction())
// Even Use multiple NSSortDescriptors
let nameSortDescriptors = [
NSSortDescriptor(key: "lastname", ascending: true),
NSSortDescriptor(key: "firstname", ascending: true)
]
let ... = somePeople.sort(by: nameSortDescriptors.toCompareFunction())
请查看测试以获取更多示例。
用法
要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install
命令。
安装
Swift版本
SwiftSortUtils的这个版本是为与Swift 5一起使用而设计的。
CocoaPods
SwiftSortUtils通过CocoaPods提供。安装它,只需将以下行添加到您的Podfile中。
pod "SwiftSortUtils"
手动
下载Pod/Classes
中的文件,并将它们拖放到您的项目中。
作者
Daniel Strittmatter, [email protected]
许可协议
SwiftSortUtils可在MIT许可协议下获得。更多信息,请参阅LICENSE文件。