On dirait que j'ai un problème avec quelque chose qui ne devrait pas être le cas ... Mais je voudrais demander de l'aide.
Il y a quelques explications ici sur la pile que je ne reçois pas.
Avoir deux classes simples où l'une se réfère à l'autre, comme ci-dessous;
class User {
lazy var name: String = ""
lazy var age: Int = 0
init (name: String, age: Int) {
self.name = name
self.age = age
}
}
class MyOwn {
let myUser: User = User(name: "John", age: 100)
var life = myUser.age
//Cannot use instance member 'myUser' within property initializer
//property initializers run before 'self' is available
}
J'obtiens l'erreur de compilation commentée. Quelqu'un peut-il me dire ce que je dois faire pour résoudre le cas?
Un grand merci à tout homme bon pour son aide!
Comme indiqué correctement par vadian, vous devez créer un init
dans de tels scénarios:
class MyOwn {
let myUser: User
var life: Int
init() {
self.myUser = User(name: "John", age: 100)
self.life = myUser.age
}
}
Vous ne pouvez pas fournir de valeur par défaut pour une propriété stockée qui dépend d'une autre propriété d'instance.
Vous devez déclarer la vie comme ceci:
lazy var life:Int = {
return self.myUser.age
}()
Parce que vous essayez d'initialiser une propriété (variable) avec une autre pendant le processus d'initialisation. Pour le moment, les variables ne sont pas encore disponibles.