Ich versuche, einen fehlgeleiteten Initialisierer für eine Klasse zu erstellen. Meine Klasse wird mit der Eingabe einer Netzwerkanforderung initialisiert. Netzwerke sind unzuverlässig, ich möchte einen Initialisierer erstellen, der das Vorhandensein auf allen Eigenschaften überprüft und andernfalls fehlschlägt.Ambiguous Verweis auf Mitglied 'tiefgestellt' auf Dictionary
Ich versuche, hier Verwendung von Schutz zu machen, also bitte keine offensichtlichen Fehler bei der Annäherung an Punkt frei fühlen:
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
}
}
}
Die guard self.jobId
Linie versagt zu kompilieren, mit Fehlern: Ambiguous reference to member 'subscript'
Haben Sie Ideen, wie Sie diesen Fehler beheben können?
Wollen Sie * * fail (dh Rückkehr 'nil') oder * throw * ein Fehler, wenn die Eigenschaft nicht vorhanden ist? Das sind zwei verschiedene Dinge. –
Die Fehlermeldung scheint irreführend zu sein: Der Ausdruck nach der 'guard'-Anweisung muss ein boolesches Ergebnis oder das Bewertungsergebnis einer optionalen Bindung haben (' let'-Syntax). Erwägen Sie, das Eingabewörterbuch * vor dem Aufruf des Initialisierers zu validieren. – vadian
@MartinR, Ich würde es vorziehen, einen Fehler zu werfen, da der Anrufer des Initialisierers wissen wird, warum die Initialisierung fehlgeschlagen ist, Kontext, den der Anrufer nicht erhalten wird, indem er Null zurückgibt. –