Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Return from initializer without initializing all stored properties

Tags:

class

ios

swift

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?

like image 666
Isuru Avatar asked Apr 16 '15 11:04

Isuru


1 Answers

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.

like image 76
Dániel Nagy Avatar answered Sep 20 '22 17:09

Dániel Nagy