J'ai construit ce struct
pour gérer un type spécifique de données que je prévois d'utiliser dans certaines classes personnalisées.
Mon problème est que la variable featureSubSet est capable de faire partie de quelques énumérations, et quand cette structure est initialisée, elle ne sait pas quelle enum elle sera, donc je l'ai déclarée comme Any. Lorsque l'init public est appelé, il canalise de manière appropriée les données vers la méthode init privée nécessaire afin qu'elle puisse être initialisée correctement et complètement.Pourquoi l'erreur "self" est-elle utilisée avant l'appel de self.init dans ma structure?
Je reçois l'erreur à la fin de la méthode public init, mais je ne suis pas sûr de savoir comment la faire disparaître.
struct Feature {
//MARK: Variables needed for Feature
var featureSet: FeatureType
var featureSubSet: Any
var effect: String
var active: Bool?
var skill: Skill?
var ability: Ability?
public init(base: String, sub: String, effect: String, skill: Skill? = nil, ability: Ability? = nil) {
switch base {
case featureCategoryList()[0]: // Character Features
self.init(CharacterFeature: sub, effect: effect)
case featureCategoryList()[1]: // Combat Features
self.init(CombatFeature: sub, effect: effect)
case featureCategoryList()[2]: //Skill Features
guard let newSkill = skill else {
print("No skill")
return
}
self.init(SkillFeature: sub, effect: effect, skill: newSkill)
default:
print("Somehow you picked something not on the list.")
break
}
}
private init(CharacterFeature sub: String, effect: String) {
self.featureSet = .CharacterFeatures
self.featureSubSet = CharacterFeatures.init(rawValue: sub)!
self.effect = effect
}
private init(CombatFeature sub: String, effect: String) {
self.featureSet = .CombatFeatures
self.featureSubSet = CharacterFeatures.init(rawValue: sub)!
self.effect = effect
}
private init(SkillFeature sub: String, effect: String, skill: Skill) {
self.featureSet = .SkillFeatures
self.featureSubSet = CharacterFeatures.init(rawValue: sub)!
self.skill = skill
self.effect = effect
}
//MARK: Feature functions
func string() -> String {
//TODO: Make a string output for what the feature is.
return ""
}
}
Quelle erreur obtenez-vous? –