2 votes

Initialisateur d'une classe simple en Swift se trompant

J'essaie de créer une classe pour apprendre les tests unitaires. Cependant, je suis confronté à certains problèmes qui me posent problème.

Ma classe :

import Foundation

class Monster{

var name: String{
    didSet(newName){
        self.name = validateName(newName: self.name)
    }
}

var level: Int{
    didSet(level){
        if self.level < 0 {
            self.level = 0
        }else if self.level > 100 {
            self.level = 100
        }
    }
}

var hitpoints: Int{
    didSet(newHP){
        print(self.hitpoints)
        if self.hitpoints < 0 {
            self.hitpoints = 0
        }else if self.hitpoints > self.level * 20{
            self.hitpoints = self.level * 20
        }
    }
}

init(name: String, argLevel: Int, argHP: Int) {
    self.name = name;
    self.level = argLevel
//      self.hitpoints = validateHP(newHP: argHP, curLevel: argLevel)
    let newHP = validateHP(newHP: argHP, curLevel: argLevel)
    self.hitpoints = newHP
    self.name = validateName(newName: name)
}

private func validateName(newName: String) -> String{
    return newName.replacingOccurrences(of: ",", with: "")
}

private func validateHP(newHP: Int, curLevel: Int) -> Int{
    if newHP < 0 {
        return 0
    }else if newHP > 20 * curLevel {
        return 20 * curLevel
    }else{
        return newHP
    }
}

}

Je ne suis pas en mesure d'utiliser cette classe car je reçois une erreur pour avoir utilisé la fonction validateHP() dans l'initialisateur.

L'erreur : Desktop/UnitTest/UnitTesting/Monster.swift:44:15 : Use of 'self' in method call 'validateHP' before all stored properties are initialized.

Je ne comprends pas ce message car je n'utilise aucune propriété stockée dans la définition de la fonction ou comme l'un des arguments. En fait, j'ai modifié l'ensemble de la structure des arguments pour que cela ne se produise pas.

Si quelqu'un peut m'expliquer ce qui m'échappe, ce serait vraiment utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X