Advertisement
Guest User

Untitled

a guest
Aug 6th, 2016
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.66 KB | None | 0 0
  1. //: Playground - noun: a place where people can play
  2.  
  3. import UIKit
  4.  
  5. struct JSON { }
  6.  
  7. struct ZewoMySQL {
  8. func execute(sqlStatement: String) {}
  9. }
  10.  
  11. protocol ModelAdaptor {
  12.  
  13. associatedtype ModelType
  14.  
  15. func save ( task: ModelType, onCompletion: (SuccessOrFail<ModelType>)->Void)
  16. // delete
  17. // fetch
  18.  
  19. }
  20.  
  21. enum SuccessOrFail<T> {
  22. case success(T)
  23. case failure(Error)
  24. }
  25.  
  26. protocol Model {
  27.  
  28. static var databaseAdaptor: ModelAdaptor? {get set}
  29.  
  30. func save (onComplete: (SuccessOrFail<Self>) -> Void)
  31.  
  32. }
  33.  
  34.  
  35. struct Task: Model {
  36.  
  37. static var databaseAdaptor: ModelAdaptor? = nil
  38.  
  39. var id : String? = nil
  40. var title : String
  41.  
  42. }
  43.  
  44. extension Task {
  45.  
  46. func save (onComplete: (SuccessOrFail<Task>) -> Void) {
  47. Task.databaseAdaptor?.save(task: Task) { result in
  48. onComplete(result)
  49. }
  50. }
  51.  
  52. }
  53.  
  54. extension Task {
  55.  
  56. init?(withJSON: JSON) {
  57. return nil
  58. }
  59.  
  60. init(title: String) {
  61. self.title
  62. }
  63. }
  64.  
  65. struct TaskAdaptor : ModelAdaptor {
  66.  
  67. let mysql = ZewoMySQL()
  68.  
  69. typealias ModelType = Task
  70.  
  71. init(username: String, password: String, tableName: String) {
  72. self.tableName = tableName
  73. }
  74.  
  75. let tableName: String = "tasks"
  76.  
  77. func save( task: Task, onCompletion: (SuccessOrFail<Task>)->Void) {
  78. let statement = "INSERT INTO \(tableName) (title) VALUES \(task.title)"
  79.  
  80. mysql.execute(sqlStatement: statement)
  81.  
  82.  
  83. }
  84. }
  85.  
  86. Task.databaseAdaptor = TaskAdaptor(username: "root", password: "password", tableName: "tasks")
  87.  
  88. let task1 = Task(title: "Reticulate Splines")
  89. task1.save {
  90. result in
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement