Я имею следующую структуру:ошибки компилятора для STRUCT инициализации в Swift
struct Person {
let name: String
let age: Int
let assets: Double
}
Для инициализации человека, я хотел бы передать его словарь, который содержит имя и возраст, а также информацию для расчета активы:
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
}
С помощью этой установки, я получаю две ошибки компилятора:
- «я», используемый перед всеми хранящимися свойствами являются Перво lized
- Возвращения из инициализаторе без инициализации всех сохраненных свойств
После предложения компилятора, я добавил значение по умолчанию для каждого свойства, и изменил их, чтобы быть var
:
struct Person {
var name: String = ""
var age: Int = 0
var assets: Double = 0.0
// init ...
}
И действительно, ошибки компилятора исчезли.
Но я нахожусь на правильном пути, сделав эти исправления?
Получил это. И даже если значения в порядке, я могу получить ошибку во время выполнения, если я создам опечатку: 'info [" naem "]'. Поэтому я просто перейду со значениями по умолчанию или 'optionals', мне нужно подумать об этом. – Koen
И вызывать функцию из 'init' нормально для вычисления значения? – Koen
Да, до тех пор, пока переменная, которую вы устанавливаете, объявляется как «var», либо по умолчанию, либо как необязательный. – Keiwan