Advertisement
Vit_abo

Vitaly generics

Nov 29th, 2022 (edited)
1,363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.25 KB | None | 0 0
  1. // Task 3
  2. func summ<T: Numeric>(params: T...) -> T {
  3.     params.reduce(0, +)
  4. }
  5.  
  6. print(summ(params: 1, 4, 3, 4))
  7.  
  8. class Stack<T> {
  9.     private var storage = [T]()
  10.  
  11.     func push(_ element: T) {
  12.         storage.append(element)
  13.     }
  14.  
  15.     func pop() -> T? {
  16.         if storage.isEmpty {
  17.             return nil
  18.         }
  19.         return storage.removeLast()
  20.     }
  21.  
  22.     func printf() {
  23.         print(storage)
  24.     }
  25. }
  26.  
  27. var someStack = Stack<Int>()
  28. someStack.push(3)
  29. someStack.push(5)
  30. someStack.pop()
  31. someStack.printf()
  32.  
  33. enum Result<T> {
  34.     case success(T)
  35.     case error
  36. }
  37.  
  38. let serverResponse: Result = .success("res.json")
  39.  
  40. // Task 4
  41. var storage: [Any] = []
  42.  
  43. func saveItems<T>(_ items: T...) {
  44.     items.forEach { item in
  45.         storage.append(item)
  46.     }
  47. }
  48.  
  49. saveItems("hi", "there")
  50. print(storage)
  51.  
  52. // Tasks 5 & 6
  53. struct Storage<T: StringProtocol> {
  54.     enum SortOrder {
  55.         case ascending, descending, byLength
  56.     }
  57.  
  58.     private var storage = [T]()
  59.  
  60.     mutating func append(_ elements: T...) {
  61.         elements.forEach { element in
  62.             storage.append(element)
  63.         }
  64.     }
  65.  
  66.     func printStorage(sortOrder: SortOrder = .ascending) {
  67.         switch sortOrder {
  68.         case .ascending: print(storage.sorted(by: <))
  69.         case .descending: print(storage.sorted(by: >))
  70.         case .byLength: print(storage.sorted { lhs, rhs in
  71.             lhs.count < rhs.count
  72.             })
  73.         }
  74.     }
  75. }
  76.  
  77. var swiftSong = Storage<String>()
  78. swiftSong.append("Haters", "gonna", "hate")
  79. swiftSong.printStorage(sortOrder: .byLength)
  80.  
  81. extension Storage {
  82.     subscript(index: Int) -> T? {
  83.         return (0..<storage.count).contains(index) ? storage[index] : nil
  84.     }
  85. }
  86.  
  87. print(swiftSong[1])
  88.  
  89.  
  90. // Protocols
  91. // Task 5
  92. protocol Hotel {
  93.     var roomCount: Int { get set }
  94. }
  95.  
  96. class HotelAlpha: Hotel {
  97.     var roomCount: Int
  98.    
  99.     init(rooms: Int) {
  100.         roomCount = rooms
  101.     }
  102. }
  103.  
  104. // Task 7
  105.  
  106. protocol Car {
  107.     var typeOfEngine: String { get }
  108.     var maximumDistanceEV: Int? { get set }
  109.    
  110.     func goBrrr()
  111. }
  112.  
  113. class DieselCar: Car {
  114.     var typeOfEngine: String = "Diesel"
  115.     var maximumDistanceEV: Int?
  116.  
  117.     func goBrrr() {
  118.         print("Diesel car goes grrrr-brrrrr")
  119.     }
  120. }
  121.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement