Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //: Playground - noun: a place where people can play
- import UIKit
- struct JSON { }
- struct ZewoMySQL {
- func execute(sqlStatement: String) {}
- }
- protocol ModelAdaptor {
- associatedtype ModelType
- func save ( task: ModelType, onCompletion: (SuccessOrFail<ModelType>)->Void)
- // delete
- // fetch
- }
- enum SuccessOrFail<T> {
- case success(T)
- case failure(Error)
- }
- protocol Model {
- static var databaseAdaptor: ModelAdaptor? {get set}
- func save (onComplete: (SuccessOrFail<Self>) -> Void)
- }
- struct Task: Model {
- static var databaseAdaptor: ModelAdaptor? = nil
- var id : String? = nil
- var title : String
- }
- extension Task {
- func save (onComplete: (SuccessOrFail<Task>) -> Void) {
- Task.databaseAdaptor?.save(task: Task) { result in
- onComplete(result)
- }
- }
- }
- extension Task {
- init?(withJSON: JSON) {
- return nil
- }
- init(title: String) {
- self.title
- }
- }
- struct TaskAdaptor : ModelAdaptor {
- let mysql = ZewoMySQL()
- typealias ModelType = Task
- init(username: String, password: String, tableName: String) {
- self.tableName = tableName
- }
- let tableName: String = "tasks"
- func save( task: Task, onCompletion: (SuccessOrFail<Task>)->Void) {
- let statement = "INSERT INTO \(tableName) (title) VALUES \(task.title)"
- mysql.execute(sqlStatement: statement)
- }
- }
- Task.databaseAdaptor = TaskAdaptor(username: "root", password: "password", tableName: "tasks")
- let task1 = Task(title: "Reticulate Splines")
- task1.save {
- result in
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement