Search code examples
iosswiftmvvmviewmodel

Making a Variable in View Model Writtable Instead of Get-Only - Swift


What I'm trying to do is add an insert to an empty array variable in my view model through an if else statement. However when I try to add an inset, I get an error saying that my view model array variable is a get-only property.

My question is how can I make my variable in a read and write format so I can add inserts to it? Thanks!

// ViewModel Variable

var selectedTimesOfDay: [String] {
   return jobService.selectedTimesOfDay
}

// My Function

@objc func handleContinue() {
        
   guard let jobService = jobService else { return }
   let viewModel = JobServiceViewModel(jobService: jobService)
        
   if morningButton.isSelected {
      viewModel.selectedTimesOfDay.insert("Morning", at: 0)
   }
        
}

Solution

  • I had to put my view model variable in a setter and getter so it can be writable. Then set an empty array in the initializer so I can add an insert in my controller.

    // View Model

    var _selectedTimesOfDay: [String]
    
    var selectTimesOfDay: [String] {
        set {
           _selectedTimesOfDay = newValue
        }
        get {
           return _selectedTimesOfDay
        }
    }
    
    init(jobService: JobService) {
        self.jobService = jobService
        self._selectedDate = ""
        self._selectedTimesOfDay = []
    }