Guest User

Untitled

a guest
Jul 19th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. //
  2. // NilCollapse.swift
  3. //
  4. // Created by Dylan Lukes on 7/19/18.
  5. //
  6. // No Rights Reserved.
  7.  
  8. extension Collection {
  9. subscript (safe index: Index) -> Element? {
  10. return indices.contains(index) ? self[index] : nil
  11. }
  12. }
  13.  
  14. postfix operator ¿
  15. postfix func ¿<A1, R>(_ f: @escaping (A1) -> R) -> (A1?) -> R? {
  16. return { (a1: A1?) -> R? in
  17. guard let a1 = a1 else { return nil }
  18. return f(a1)
  19. }
  20. }
  21.  
  22. postfix func ¿<A1, A2, R>(_ f: @escaping (A1, A2) -> R) -> (A1?, A2?) -> R? {
  23. return { (a1: A1?, a2: A2?) -> R? in
  24. guard let a1 = a1 else { return nil }
  25. guard let a2 = a2 else { return nil }
  26. return f(a1, a2)
  27. }
  28. }
  29.  
  30. postfix func ¿<A1, A2, A3, R>(_ f: @escaping (A1, A2, A3) -> R) -> (A1?, A2?, A3?) -> R? {
  31. return { (a1: A1?, a2: A2?, a3: A3?) -> R? in
  32. guard let a1 = a1 else { return nil }
  33. guard let a2 = a2 else { return nil }
  34. guard let a3 = a3 else { return nil }
  35. return f(a1, a2, a3)
  36. }
  37. }
  38.  
  39. postfix func ¿<A1, A2, A3, A4, R>(_ f: @escaping (A1, A2, A3, A4) -> R) -> (A1?, A2?, A3?, A4?) -> R? {
  40. return { (a1: A1?, a2: A2?, a3: A3?, a4: A4?) -> R? in
  41. guard let a1 = a1 else { return nil }
  42. guard let a2 = a2 else { return nil }
  43. guard let a3 = a3 else { return nil }
  44. guard let a4 = a4 else { return nil }
  45. return f(a1, a2, a3, a4)
  46. }
  47. }
  48.  
  49. postfix func ¿<A1, A2, A3, A4, A5, R>(_ f: @escaping (A1, A2, A3, A4, A5) -> R) -> (A1?, A2?, A3?, A4?, A5?) -> R? {
  50. return { (a1: A1?, a2: A2?, a3: A3?, a4: A4?, a5: A5?) -> R? in
  51. guard let a1 = a1 else { return nil }
  52. guard let a2 = a2 else { return nil }
  53. guard let a3 = a3 else { return nil }
  54. guard let a4 = a4 else { return nil }
  55. guard let a5 = a5 else { return nil }
  56. return f(a1, a2, a3, a4, a5)
  57. }
  58. }
  59.  
  60. postfix func ¿<A1, A2, A3, A4, A5, A6, R>(_ f: @escaping (A1, A2, A3, A4, A5, A6) -> R) -> (A1?, A2?, A3?, A4?, A5?, A6?) -> R? {
  61. return { (a1: A1?, a2: A2?, a3: A3?, a4: A4?, a5: A5?, a6: A6?) -> R? in
  62. guard let a1 = a1 else { return nil }
  63. guard let a2 = a2 else { return nil }
  64. guard let a3 = a3 else { return nil }
  65. guard let a4 = a4 else { return nil }
  66. guard let a5 = a5 else { return nil }
  67. guard let a6 = a6 else { return nil }
  68. return f(a1, a2, a3, a4, a5, a6)
  69. }
  70. }
  71.  
  72. postfix func ¿<A1, A2, A3, A4, A5, A6, A7, R>(_ f: @escaping (A1, A2, A3, A4, A5, A6, A7) -> R) -> (A1?, A2?, A3?, A4?, A5?, A6?, A7?) -> R? {
  73. return { (a1: A1?, a2: A2?, a3: A3?, a4: A4?, a5: A5?, a6: A6?, a7: A7?) -> R? in
  74. guard let a1 = a1 else { return nil }
  75. guard let a2 = a2 else { return nil }
  76. guard let a3 = a3 else { return nil }
  77. guard let a4 = a4 else { return nil }
  78. guard let a5 = a5 else { return nil }
  79. guard let a6 = a6 else { return nil }
  80. guard let a7 = a7 else { return nil }
  81. return f(a1, a2, a3, a4, a5, a6, a7)
  82. }
  83. }
Add Comment
Please, Sign In to add comment