55 lines
1.9 KiB
Swift
55 lines
1.9 KiB
Swift
//
|
|
// MoleculeStack.swift
|
|
// MVMCoreUI
|
|
//
|
|
// Created by Suresh, Kamlesh on 10/3/19.
|
|
// Copyright © 2019 Suresh, Kamlesh. All rights reserved.
|
|
//
|
|
// A stack that has a list molecule stack items.
|
|
|
|
import Foundation
|
|
|
|
@objcMembers public class MoleculeStackModel: ContainerModel, MoleculeModelProtocol, StackModelProtocol {
|
|
public class var identifier: String {
|
|
return "stack"
|
|
}
|
|
public var backgroundColor: Color?
|
|
public var molecules: [MoleculeStackItemModel]
|
|
public var axis: NSLayoutConstraint.Axis = .vertical
|
|
public var spacing: CGFloat = 16.0
|
|
public var useStackSpacingBeforeFirstItem = false
|
|
|
|
public init(molecules: [MoleculeStackItemModel]) {
|
|
self.molecules = molecules
|
|
super.init()
|
|
}
|
|
|
|
private enum CodingKeys: String, CodingKey {
|
|
case moleculeName
|
|
case molecules
|
|
case axis
|
|
case spacing
|
|
}
|
|
|
|
required public init(from decoder: Decoder) throws {
|
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
|
molecules = try typeContainer.decode([MoleculeStackItemModel].self, forKey: .molecules)
|
|
if let axisString = try typeContainer.decodeIfPresent(String.self, forKey: .axis), let optionalAxis = NSLayoutConstraint.Axis(rawValue: axisString) {
|
|
axis = optionalAxis
|
|
}
|
|
if let spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing) {
|
|
self.spacing = spacing
|
|
}
|
|
try super.init(from: decoder)
|
|
}
|
|
|
|
public override func encode(to encoder: Encoder) throws {
|
|
try super.encode(to: encoder)
|
|
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
try container.encode(moleculeName, forKey: .moleculeName)
|
|
try container.encodeIfPresent(molecules, forKey: .molecules)
|
|
try container.encodeIfPresent(axis.rawValueString, forKey: .axis)
|
|
try container.encodeIfPresent(spacing, forKey: .spacing)
|
|
}
|
|
}
|