Ich habe folgende Struktur:Compiler-Fehler für struct init in Swift
struct Person {
let name: String
let age: Int
let assets: Double
}
eine Person zu initialisieren, ich möchte es passieren, ein Wörterbuch, das den Namen und das Alter enthält, sowie Informationen die zur Berechnung Vermögen:
public init(info: [String : AnyObject]) {
if let name = info["name"] as? String {
self.name = name
}
if let age = info["age"] as? Int {
self.age = age
}
if let assets = info["assets"] as? [String : AnyObject] {
calculateAssets(assets: assets)
}
}
mutating func calculateAssets(assets: [String : AnyObject]) {
self.assets = 1+2+3.4 // really do this with info from the dictionary
}
Mit diesem Setup, erhalte ich zwei Compiler-Fehler:
- 'selbst' verwendet, bevor alle gespeicherten Objekte sind initia lized
- Rückkehr aus initializer ohne dass die gespeicherten Eigenschaften Initialisierung
Nach den Compiler Vorschläge, habe ich für jede Eigenschaft einen Standardwert, und verändert sie ein var
sein:
struct Person {
var name: String = ""
var age: Int = 0
var assets: Double = 0.0
// init ...
}
Und in der Tat, Die Compilerfehler sind weg.
Aber bin ich mit diesen Korrekturen auf dem richtigen Weg?
Got it. Und selbst wenn die Werte in Ordnung sind, könnte ich einen Laufzeitfehler bekommen, wenn ich einen Tippfehler mache: 'info [" naem "]'. Also werde ich einfach mit den Standardwerten oder den 'optionals' gehen, darüber muss ich nachdenken. – Koen
Und eine Funktion von 'init' aufzurufen, ist ok, um einen Wert zu berechnen? – Koen
Ja, solange die Variable, die Sie festlegen, als "Var" mit einem Standardwert oder als Optional deklariert ist. – Keiwan