Advertisement
Guest User

Untitled

a guest
Dec 2nd, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. //: Playground - noun: a place where people can play
  2.  
  3. import Foundation
  4.  
  5. // Constraining the Element to NSObject makes sure that NSSortDescriptors can be used for comparison.
  6. extension Collection where Iterator.Element: NSObject {
  7. func sorted(using descriptors: [NSSortDescriptor]) -> [Iterator.Element] {
  8. return self.sorted { (element1, element2) in
  9. for descrptor in descriptors {
  10. let compareResult = descrptor.compare(element1, to: element2)
  11. switch compareResult {
  12. case .orderedSame: continue
  13. case .orderedAscending: return true
  14. case .orderedDescending: return false
  15. }
  16. }
  17. return false
  18. }
  19. }
  20. }
  21.  
  22. // Can be sorted with extended Collection sorted(using:) function.
  23. class Thing: NSObject {
  24. let id: Int
  25. let name: String
  26. init(id: Int, name: String) {
  27. self.id = id
  28. self.name = name
  29. super.init()
  30. }
  31.  
  32. override var description: String {
  33. return "\(id): " + self.name
  34. }
  35. }
  36.  
  37. // Can't be sorted with extended Collection sorted(using:) function.
  38. class Foo: Hashable {
  39. let id: Int
  40. let name: String
  41. init(id: Int, name: String) {
  42. self.id = id
  43. self.name = name
  44. }
  45.  
  46. var hashValue: Int {
  47. return id
  48. }
  49. }
  50. func ==(lhs: Foo, rhs: Foo) -> Bool {
  51. return lhs.id == rhs.id
  52. }
  53.  
  54.  
  55. var mySet: Set<Thing> = [Thing(id: 10, name: "Ten"), Thing(id: 1, name: "One"), Thing(id: 1, name: "AOne"), Thing(id: 2, name: "Two"), Thing(id: 4, name: "Four"), Thing(id: 3, name: "Three")]
  56.  
  57. // compiler won't offer sorted(using: [NSSortDescriptor]) since this Array type isn't NSObject.
  58. var fooSet: Set<Foo> = [Foo(id: 10, name: "ten"), Foo(id: 1, name: "one")]
  59.  
  60. let sorts = [NSSortDescriptor(key: "id", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
  61. var sorted = mySet.sorted(using: sorts)
  62.  
  63. print(sorted)
  64. // [1: AOne, 1: One, 2: Two, 3: Three, 4: Four, 10: Ten]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement