Swift error: return from initializer without initializing all stored properties
The swift error: return from initializer without initializing all stored properties, occurs when all the properties in the structure are not initialized in the init method.
Let us recreate this scenario. We shall define a structure with three properties but only two of them are initialized in init method.
main.swift
struct car { var brand: String var name: String var capacity: Int init(brand: String, name: String) { self.brand = brand self.name = name } } let car1 = car(brand: "Hyundai", name: "Creta") print("Car details\n-----------") print("Brand is \(car1.brand)") print("Name is \(car1.name)") print("Seating capacity is \(car1.capacity)")
Output
main.swift:9:4: error: return from initializer without initializing all stored properties } ^ main.swift:4:8: note: 'self.capacity' not initialized var capacity: Int ^
How to resolve this issue?
To solve this issue, we have to initialize all the properties of the structure in the init method or provide a default value to the property while declaring the property in the structure.
Solution 1: Initialize all properties in init method
Let us initialize all the methods in the init method of structure. Also, we will provide all the arguments during structure call.
main.swift
struct car { var brand: String var name: String var capacity: Int init(brand: String, name: String, capacity: Int) { self.brand = brand self.name = name self.capacity = capacity } } let car1 = car(brand: "Hyundai", name: "Creta", capacity: 5) print("Car details\n-----------") print("Brand is \(car1.brand)") print("Name is \(car1.name)") print("Seating capacity is \(car1.capacity)")
Output
Car details ----------- Brand is Hyundai Name is Creta Seating capacity is 5
Solution 2: Provide a default value to the property
We can also provide a default value to the properties that are not initialized in the init method.
main.swift
struct car { var brand: String var name: String var capacity = 5 init(brand: String, name: String) { self.brand = brand self.name = name } } let car1 = car(brand: "Hyundai", name: "Creta") print("Car details\n-----------") print("Brand is \(car1.brand)") print("Name is \(car1.name)") print("Seating capacity is \(car1.capacity)")
Output
Car details ----------- Brand is Hyundai Name is Creta Seating capacity is 5