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.