Skip to content

Instantly share code, notes, and snippets.

@alfian0
Last active July 29, 2018 03:39
Show Gist options
  • Save alfian0/077968e8e64eb84bb5faf909340c5d68 to your computer and use it in GitHub Desktop.
Save alfian0/077968e8e64eb84bb5faf909340c5d68 to your computer and use it in GitHub Desktop.
Simple Clean Arcitecture
struct CreateOrderRequest {
// MARK:
// Interactor
// Get or fetch Model Response From API
struct CreateOrderResponse {
// MARK:
// ViewModel ~> Responsibility to parse Interactor response to Model View
struct CreateOrderViewModel {
let orderNumber: Int
let orderName: String
let orderCount: Int
}
var result: CreateOrderViewModel?
private init(data: [String: Any]) {
result = parse(data: data)
}
private func parse(data: [String: Any]) -> CreateOrderViewModel? {
guard let orderNumber = data["order_number"] as? Int,
let orderName = data["order_name"] as? String,
let orderCount = data["order_count"] as? Int else { return nil }
return CreateOrderViewModel(orderNumber: orderNumber, orderName: orderName, orderCount: orderCount)
}
}
var response: CreateOrderResponse?
private init() {
response = fetch()
}
private func fetch() -> CreateOrderResponse {
let data: [String: Any] = [
"order_number": 123456,
"order_name": "Adidas",
"order_count": 1
]
return CreateOrderResponse(data: data)
}
}
let orderRequest = CreateOrderRequest()
print(orderRequest.response?.result?.orderName)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment