I have a simple class like this.
public class User { let id: Int let firstName: String let lastName: String let email: String? init(id: Int, firstName: String, lastName: String) { self.id = id self.firstName = firstName self.lastName = lastName } }
This compiled just fine in previous Swift version. In Swift 1.2, I get the following compilation error.
Return from initializer without initializing all stored properties
Why is that and how can I resolve it?
If a property is constant, so created with let
, you have to initialize it in place or in the init
method, even if it is an Optional
. If you want to be able to set email optionally, you should change let
to var
. In other words, if you are not initializing a variable in either the init method or class body, then the variable must be both a var
and an Optional
.
Related statements in the docs:
You can assign a value to a constant property at any point during initialization, as long as it is set to a definite value by the time initialization finishes. Once a constant property is assigned a value, it can’t be further modified.
For class instances, a constant property can only be modified during initialization by the class that introduces it. It cannot be modified by a subclass.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With