У моего объекта есть целочисленный идентификатор. Так как это обязательное свойство я не определив его как необязательный и я требовать его в специально отведенном инициализаторе:Инициализатор удобства с необязательным свойством
class Thing {
var uniqueID: Int
var name: String?
init (uniqueID: Int) {
self.uniqueID = uniqueID
}
}
Поскольку я создаю один из них с некоторой JSON, использование вдоль линий:
if let uniqueID = dictionary["id"] as? Int {
let thing = thing(uniqueID: unique)
}
(Я бы с удовольствием проверил, что у меня до сих пор, между прочим).
Далее, я хотел бы иметь возможность добавить инициализатор удобства в класс Thing, который принимает объект словаря и соответствующим образом задает свойства. Это включает в себя необходимые uniqueID
и некоторые другие дополнительные свойства. Моя лучшая работа до сих пор является:
convenience init (dictionary: [String: AnyObject]) {
if let uniqueID = dictionary["id"] as? Int {
self.init(uniqueID: uniqueID)
//set other values here?
}
//or here?
}
Но, конечно, это не является достаточным, так как назначенный инициализатор не вызывается на всех путях условной.
Как я должен обрабатывать этот сценарий? Возможно ли это? Или я должен согласиться с тем, что uniqueID
должен быть необязательным?
Я вижу, спасибо. Вы считаете, что это необычная настройка? Я спрашиваю, потому что это некоторые из первых Swift, которые я написал, поэтому я хотел бы использовать «стандартные» шаблоны везде, где это возможно (и где они существуют). Как бы вы справились с этим, если бы это был ваш код? Просто позвольте идентификатору быть дополнительным? –
Я не думаю, что это слишком странно. То, что я сделаю полностью, зависит от гораздо большего контекста. Если вы действительно заинтересованы в том, чтобы найти лучший способ сделать это, вы всегда можете задать вопрос на [codereview.se] с рабочей версией вашего кода. – nhgrif
@BenPackard Я расширил свой ответ. Возможно, это поможет вам. Внедрите эти методы как таковые и установите контрольную точку для отслеживания пути выполнения через этот код при инициализации со словарем. – nhgrif