Я пытаюсь создать отказоустойчивый инициализатор для класса. Мой класс будет инициализирован с использованием ввода из сетевого запроса. Сети ненадежны, я хочу создать инициализатор для проверки наличия на всех свойствах, а для него - иначе.Неоднозначная ссылка на членский указатель 'on Dictionary
Я пытаюсь использовать охранника здесь, поэтому, пожалуйста, не стесняйтесь указать любые очевидные ошибки в подходе:
public class JobModel {
let jobId: String
let status: String
let toName: String
let toAddress: String
let description: String
let fee: Int
let jobDate: NSDate
let fromName: String
let fromAddress: String
init?(job: [String:AnyObject]) throws {
guard self.jobId = job["jobid"] as! String else {
throw InitializationError.MissingJobId
}
}
}
guard self.jobId
линия не в состоянии компиляции, с ошибкой: Ambiguous reference to member 'subscript'
Любые идеи о том, как исправить эту ошибку?
Вы хотите * * (неудачу т.е. возвращение 'nil') или * бросок * ошибка, если свойство отсутствует? Это две разные вещи. –
Сообщение об ошибке, похоже, вводит в заблуждение: выражение после инструкции 'guard' должно иметь логический результат или результат оценки необязательной привязки (синтаксис' let'). Рассмотрите возможность проверки входного словаря * перед * вызовом инициализатора. – vadian
@MartinR, я бы предпочел выбросить ошибку, поскольку вызывающий элемент инициализатора будет знать, почему инициализация не удалась, контекст, который вызывающий абонент не получит, вернув nil. –