Fix methodology of template model subclassing.

This commit is contained in:
Kyle Matthew Hedden 2020-06-26 20:00:54 -04:00
parent d8e88aeac7
commit 0cb184a41b
2 changed files with 11 additions and 6 deletions

View File

@ -13,6 +13,10 @@ public protocol TemplateProtocol: AnyObject {
var templateModel: TemplateModel? { get set }
}
public protocol CustomTemplateDecoder {
func decodeTemplate(using decoder: JSONDecoder, from data: Data) throws -> TemplateModelProtocol
}
public extension TemplateProtocol where Self: ViewController {
func parseTemplate(json: [AnyHashable: Any]?) throws {
@ -20,8 +24,13 @@ public extension TemplateProtocol where Self: ViewController {
let data = try JSONSerialization.data(withJSONObject: pageJSON)
let decoder = JSONDecoder()
try decoder.add(delegateObject: delegateObjectIVar)
let templateModel = try decodeTemplate(using: decoder, from: data)
self.templateModel = templateModel as? TemplateModel
let templateModel: TemplateModel
if let customDecoder = self as? CustomTemplateDecoder {
templateModel = try customDecoder.decodeTemplate(using: decoder, from: data) as! Self.TemplateModel
} else {
templateModel = try decoder.decode(TemplateModel.self, from: data)
}
self.templateModel = templateModel
self.pageModel = templateModel as? MVMControllerModelProtocol
}

View File

@ -129,10 +129,6 @@ import UIKit
open func parsePageJSON() throws {
}
open func decodeTemplate(using decoder: JSONDecoder, from data: Data) throws -> TemplateModel {
return try decoder.decode(TemplateModel.self, from: data)
}
open class func verifyRequiredModulesLoaded(for loadObject: MVMCoreLoadObject?, error: AutoreleasingUnsafeMutablePointer<MVMCoreErrorObject>) -> Bool {
guard let pageType = loadObject?.pageType, var modulesRequired = MVMCoreUIViewControllerMappingObject.shared()?.modulesRequired(forPageType: pageType),