trying to fix memory leak
Signed-off-by: Matt Bruce <matt.bruce@verizon.com>
This commit is contained in:
parent
01cfa940c7
commit
80e23e190a
@ -12,16 +12,20 @@ import VDSColorTokens
|
|||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
class CheckboxViewController: UIViewController, StoryboardInitable {
|
class CheckboxViewController: UIViewController, StoryboardInitable {
|
||||||
|
deinit {
|
||||||
|
print("\(Self.self) deinit")
|
||||||
|
}
|
||||||
|
|
||||||
enum PickerType {
|
enum PickerType {
|
||||||
case surface
|
case surface
|
||||||
}
|
}
|
||||||
static var storyboardId: String = "checkbox"
|
static var storyboardId: String = "checkbox"
|
||||||
static var storyboardName: String = "Components"
|
static var storyboardName: String = "Components"
|
||||||
|
|
||||||
@IBOutlet weak var checkboxContainerView: UIView!
|
@IBOutlet weak var checkboxContainerView: UIView!
|
||||||
@IBOutlet weak var picker: UIPickerView!
|
@IBOutlet weak var picker: UIPickerView!
|
||||||
@IBOutlet weak var surfaceLabel: UILabel!
|
@IBOutlet weak var surfaceLabel: UILabel!
|
||||||
|
|
||||||
@IBOutlet weak var disabledSwitch: UISwitch!
|
@IBOutlet weak var disabledSwitch: UISwitch!
|
||||||
@IBOutlet weak var labelTextField: UITextField!
|
@IBOutlet weak var labelTextField: UITextField!
|
||||||
@IBOutlet weak var childTextField: UITextField!
|
@IBOutlet weak var childTextField: UITextField!
|
||||||
@ -31,7 +35,7 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
|
|||||||
var model = DefaultCheckboxModel()
|
var model = DefaultCheckboxModel()
|
||||||
var checkbox = Checkbox()
|
var checkbox = Checkbox()
|
||||||
var subscribers = Set<AnyCancellable>()
|
var subscribers = Set<AnyCancellable>()
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
checkboxContainerView.addSubview(checkbox)
|
checkboxContainerView.addSubview(checkbox)
|
||||||
@ -56,7 +60,7 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
|
|||||||
LabelAttributeFont(location: 2, length: 5, style: .BoldTitleLarge, color: UIColor.red.hexString!)
|
LabelAttributeFont(location: 2, length: 5, style: .BoldTitleLarge, color: UIColor.red.hexString!)
|
||||||
]
|
]
|
||||||
model.errorText = "Error Text"
|
model.errorText = "Error Text"
|
||||||
|
|
||||||
checkbox.set(with: model)
|
checkbox.set(with: model)
|
||||||
|
|
||||||
//setup UI
|
//setup UI
|
||||||
@ -66,29 +70,28 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
|
|||||||
childTextField.text = model.childText
|
childTextField.text = model.childText
|
||||||
showErrorSwitch.isOn = model.hasError
|
showErrorSwitch.isOn = model.hasError
|
||||||
errorTextField.text = model.errorText
|
errorTextField.text = model.errorText
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupBinding() {
|
func setupBinding() {
|
||||||
//create the subject
|
//create the subject
|
||||||
let modelSubject = CurrentValueSubject<DefaultCheckboxModel, Never>(model)
|
let modelSubject = CurrentValueSubject<DefaultCheckboxModel, Never>(model)
|
||||||
|
|
||||||
//assign - this will auto overwrite any changes
|
|
||||||
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).assign(to: \.model, on: self).store(in: &subscribers)
|
|
||||||
|
|
||||||
//bind
|
//bind
|
||||||
checkbox.createBinding(with: modelSubject, storeIn: &subscribers)
|
checkbox.createBinding(with: modelSubject, storeIn: &subscribers)
|
||||||
|
|
||||||
//print out on subject changes
|
|
||||||
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] model in
|
|
||||||
|
|
||||||
self?.showErrorSwitch.isOn = model.hasError
|
|
||||||
print("CheckboxViewController hasError: \(model.hasError)")
|
|
||||||
print("CheckboxViewController selected: \(model.selected)")
|
|
||||||
|
|
||||||
}.store(in: &subscribers)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//update the model
|
||||||
|
//print out on subject changes
|
||||||
|
modelSubject
|
||||||
|
.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main)
|
||||||
|
.sink { [weak self] updatedModel in
|
||||||
|
self?.model = updatedModel
|
||||||
|
self?.showErrorSwitch.isOn = updatedModel.hasError
|
||||||
|
print("CheckboxViewController hasError: \(updatedModel.hasError)")
|
||||||
|
print("CheckboxViewController selected: \(updatedModel.selected)")
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@IBAction func disabledChanged(_ sender: UISwitch) {
|
@IBAction func disabledChanged(_ sender: UISwitch) {
|
||||||
checkbox.disabled = sender.isOn
|
checkbox.disabled = sender.isOn
|
||||||
@ -107,12 +110,12 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
|
|||||||
@IBAction func showErrorChanged(_ sender: UISwitch) {
|
@IBAction func showErrorChanged(_ sender: UISwitch) {
|
||||||
checkbox.hasError = sender.isOn
|
checkbox.hasError = sender.isOn
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func onErrorTextDidEnd(_ sender: UITextField) {
|
@IBAction func onErrorTextDidEnd(_ sender: UITextField) {
|
||||||
checkbox.errorText = sender.text
|
checkbox.errorText = sender.text
|
||||||
sender.resignFirstResponder()
|
sender.resignFirstResponder()
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func surfaceClick(_ sender: Any) {
|
@IBAction func surfaceClick(_ sender: Any) {
|
||||||
pickerType = .surface
|
pickerType = .surface
|
||||||
}
|
}
|
||||||
@ -126,7 +129,7 @@ class CheckboxViewController: UIViewController, StoryboardInitable {
|
|||||||
picker.delegate = object
|
picker.delegate = object
|
||||||
picker.dataSource = object
|
picker.dataSource = object
|
||||||
}
|
}
|
||||||
|
|
||||||
switch pickerType{
|
switch pickerType{
|
||||||
case .surface:
|
case .surface:
|
||||||
update(object: surfacePicker)
|
update(object: surfacePicker)
|
||||||
|
|||||||
@ -12,23 +12,27 @@ import VDSColorTokens
|
|||||||
import Combine
|
import Combine
|
||||||
|
|
||||||
class RadioButtonViewController: UIViewController, StoryboardInitable {
|
class RadioButtonViewController: UIViewController, StoryboardInitable {
|
||||||
|
deinit {
|
||||||
|
print("\(Self.self) deinit")
|
||||||
|
}
|
||||||
|
|
||||||
enum PickerType {
|
enum PickerType {
|
||||||
case surface
|
case surface
|
||||||
}
|
}
|
||||||
static var storyboardId: String = "radioButton"
|
static var storyboardId: String = "radioButton"
|
||||||
static var storyboardName: String = "Components"
|
static var storyboardName: String = "Components"
|
||||||
|
|
||||||
@IBOutlet weak var componentContainerView: UIView!
|
@IBOutlet weak var componentContainerView: UIView!
|
||||||
@IBOutlet weak var picker: UIPickerView!
|
@IBOutlet weak var picker: UIPickerView!
|
||||||
@IBOutlet weak var surfaceLabel: UILabel!
|
@IBOutlet weak var surfaceLabel: UILabel!
|
||||||
|
|
||||||
@IBOutlet weak var disabledSwitch: UISwitch!
|
@IBOutlet weak var disabledSwitch: UISwitch!
|
||||||
@IBOutlet weak var labelTextField: UITextField!
|
@IBOutlet weak var labelTextField: UITextField!
|
||||||
@IBOutlet weak var childTextField: UITextField!
|
@IBOutlet weak var childTextField: UITextField!
|
||||||
@IBOutlet weak var showErrorSwitch: UISwitch!
|
@IBOutlet weak var showErrorSwitch: UISwitch!
|
||||||
|
|
||||||
// var radioButton: RadioButton!
|
// var radioButton: RadioButton!
|
||||||
// var radioButton2: RadioButton!
|
// var radioButton2: RadioButton!
|
||||||
var radioButtonGroup = RadioButtonGroup()
|
var radioButtonGroup = RadioButtonGroup()
|
||||||
public var model = DefaultRadioButtonGroupModel()
|
public var model = DefaultRadioButtonGroupModel()
|
||||||
public var subscribers = Set<AnyCancellable>()
|
public var subscribers = Set<AnyCancellable>()
|
||||||
@ -36,7 +40,7 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
|
|||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
|
view.addGestureRecognizer(UITapGestureRecognizer(target: self.view, action: #selector(UIView.endEditing(_:))))
|
||||||
|
|
||||||
componentContainerView.addSubview(radioButtonGroup)
|
componentContainerView.addSubview(radioButtonGroup)
|
||||||
radioButtonGroup.leadingAnchor.constraint(equalTo: componentContainerView.leadingAnchor, constant: 10).isActive = true
|
radioButtonGroup.leadingAnchor.constraint(equalTo: componentContainerView.leadingAnchor, constant: 10).isActive = true
|
||||||
radioButtonGroup.topAnchor.constraint(equalTo: componentContainerView.topAnchor, constant: 20).isActive = true
|
radioButtonGroup.topAnchor.constraint(equalTo: componentContainerView.topAnchor, constant: 20).isActive = true
|
||||||
@ -60,7 +64,7 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
|
|||||||
LabelAttributeActionModel(location: 31, length: 10){ print("clicked on the word 'conditions'") },
|
LabelAttributeActionModel(location: 31, length: 10){ print("clicked on the word 'conditions'") },
|
||||||
LabelAttributeFont(location: 2, length: 5, style: .BoldTitleLarge, color: UIColor.red.hexString!)
|
LabelAttributeFont(location: 2, length: 5, style: .BoldTitleLarge, color: UIColor.red.hexString!)
|
||||||
]
|
]
|
||||||
|
|
||||||
var model2 = DefaultRadioButtonModel()
|
var model2 = DefaultRadioButtonModel()
|
||||||
model2.value = "model 2 Value"
|
model2.value = "model 2 Value"
|
||||||
model2.childText = "Radio Sample 2"
|
model2.childText = "Radio Sample 2"
|
||||||
@ -80,25 +84,25 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
|
|||||||
//create the subject
|
//create the subject
|
||||||
let modelSubject = CurrentValueSubject<DefaultRadioButtonGroupModel, Never>(model)
|
let modelSubject = CurrentValueSubject<DefaultRadioButtonGroupModel, Never>(model)
|
||||||
|
|
||||||
//assign - this will auto overwrite any changes
|
|
||||||
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).assign(to: \.model, on: self).store(in: &subscribers)
|
|
||||||
|
|
||||||
//bind
|
//bind
|
||||||
radioButtonGroup.createBinding(with: modelSubject, storeIn: &subscribers)
|
radioButtonGroup.createBinding(with: modelSubject, storeIn: &subscribers)
|
||||||
|
|
||||||
|
//update the model
|
||||||
//print out on subject changes
|
//print out on subject changes
|
||||||
modelSubject.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main).sink { [weak self] model in
|
modelSubject
|
||||||
|
.debounce(for: .seconds(Constants.ModelStateDebounce), scheduler: RunLoop.main)
|
||||||
self?.showErrorSwitch.isOn = model.hasError
|
.sink { [weak self] updatedModel in
|
||||||
print("RadioButtonViewController hasError: \(model.hasError)")
|
self?.model = updatedModel
|
||||||
|
self?.showErrorSwitch.isOn = updatedModel.hasError
|
||||||
if let selectedModel = model.selectedModel {
|
print("RadioButtonViewController hasError: \(updatedModel.hasError)")
|
||||||
print("RadioButtonViewController selectedModel Id: \(selectedModel.id)")
|
|
||||||
|
if let selectedModel = updatedModel.selectedModel {
|
||||||
|
print("RadioButtonViewController selectedModel Id: \(selectedModel.id)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.store(in: &subscribers)
|
.store(in: &subscribers)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var radioButton: RadioButton? {
|
var radioButton: RadioButton? {
|
||||||
radioButtonGroup.selectorViews.first
|
radioButtonGroup.selectorViews.first
|
||||||
}
|
}
|
||||||
@ -119,7 +123,7 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
|
|||||||
@IBAction func showErrorChanged(_ sender: UISwitch) {
|
@IBAction func showErrorChanged(_ sender: UISwitch) {
|
||||||
radioButtonGroup.hasError = sender.isOn
|
radioButtonGroup.hasError = sender.isOn
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func surfaceClick(_ sender: Any) {
|
@IBAction func surfaceClick(_ sender: Any) {
|
||||||
pickerType = .surface
|
pickerType = .surface
|
||||||
}
|
}
|
||||||
@ -133,7 +137,7 @@ class RadioButtonViewController: UIViewController, StoryboardInitable {
|
|||||||
picker.delegate = object
|
picker.delegate = object
|
||||||
picker.dataSource = object
|
picker.dataSource = object
|
||||||
}
|
}
|
||||||
|
|
||||||
switch pickerType{
|
switch pickerType{
|
||||||
case .surface:
|
case .surface:
|
||||||
update(object: surfacePicker)
|
update(object: surfacePicker)
|
||||||
|
|||||||
@ -34,9 +34,6 @@ extension Bindable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class TextFieldBindingCell: UIView, Bindable {
|
class TextFieldBindingCell: UIView, Bindable {
|
||||||
deinit {
|
|
||||||
print("\(Self.self) deinit")
|
|
||||||
}
|
|
||||||
|
|
||||||
//bindable
|
//bindable
|
||||||
var model: User
|
var model: User
|
||||||
@ -100,6 +97,9 @@ class TextFieldBindingCell: UIView, Bindable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@objcMembers class TestViewController: UIViewController, Initable {
|
@objcMembers class TestViewController: UIViewController, Initable {
|
||||||
|
deinit {
|
||||||
|
print("\(Self.self) deinit")
|
||||||
|
}
|
||||||
|
|
||||||
var user = User(firstName: "Joe", lastName: "User")
|
var user = User(firstName: "Joe", lastName: "User")
|
||||||
private var subscriptions = Set<AnyCancellable>()
|
private var subscriptions = Set<AnyCancellable>()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user