Próbuję utworzyć inicjator failable dla klasy. Moja klasa zostanie zainicjowana przy użyciu danych wejściowych z żądania sieciowego. Sieci, które są niewiarygodne, chcę utworzyć inicjalizator kontroli pod kątem obecności we wszystkich właściwościach, a także w przeciwnym wypadku.Niejednoznaczne odwołanie do elementu 'subscript' w słowniku
Próbuję skorzystać z osłoną tutaj, więc prosimy wskazać żadnych oczywistych błędów w podejściu:
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
}
}
}
Linia guard self.jobId
się niepowodzeniem do kompilowania, z błędem: Ambiguous reference to member 'subscript'
Jakieś pomysły na poprawienie tego błędu?
Chcesz fail * * (czyli powrotu '* zerowe) lub rzut * błąd, jeśli właściwość nie jest obecna? To dwie różne rzeczy. –
Komunikat o błędzie wydaje się wprowadzać w błąd: wyrażenie po instrukcji 'guard' musi mieć wynik boolowski lub wynik oceny opcjonalnego powiązania (składnia' let'). Rozważ weryfikację słownika wejściowego * przed * wywoływaniem inicjalizatora. – vadian
@MartinR, Wolałbym rzucić błąd, ponieważ wywołujący inicjatora będzie wiedział, dlaczego inicjalizacja się nie powiodła, kontekst, którego wywołujący nie uzyska, zwracając zero. –