Search code examples
swiftinitialization

Can't initialize class with "if"


I'm trying to initialise a class using an if condition but have the following error "Return from initializer without initializing all stored properties"

I'm working on a SwiftUI project.

class StationCombined: Identifiable, ObservableObject {

    let information: BixiStationInformationViewModel
    let data: BixiStationDataViewModel

    init(data: BixiStationDataViewModel, information: BixiStationInformationViewModel ) {
        if data.station_id == information.station_id {
            self.data = data
            self.information = information
        }
    }

// Error: Return from initializer without initializing all stored properties


...

}


class StationCombinedListViewModel: ObservableObject {

    @Published var stationsCombined = [BixiStationDataViewModel]()

}

How should I handle the conditional statement?


Solution

  • In an init, you must initialize all properties. In your init, your properties are only initialized if the if succeeds.

    It seems you need a failable init:

    init?(data: BixiStationDataViewModel, information: BixiStationInformationViewModel) {
        guard data.station_id == information.station_id else { return nil }
        self.data = data
        self.information = information
    
        ...
    }
    

    A failable initializer returns an optional value that is nil if the object couldn't be created, or a wrapped value if the init? succeeds.

    For more info see the Failable Initializers section in the Swift Language Guide.