Property initializers run before 'self' is available

Solution 1:

As correctly pointed out by vadian you should create an init in such scenarios:

class MyOwn {
    let myUser: User
    var life: Int

    init() {
        self.myUser = User(name: "John", age: 100)
        self.life = myUser.age 
    }
}

You can't provide a default value for a stored property that depends on another instance property.

Solution 2:

You should declare life like this:

lazy var life:Int = {
    return self.myUser.age
}()

Because you are trying to initialise one property(variable) with another during initialisation process. At this time variables are not available yet.