クラスのfiableイニシャライザを作成しようとしています。私のクラスは、ネットワークリクエストからの入力を使用して初期化されます。ネットワークは信頼性が低く、すべてのプロパティの存在をチェックし、それ以外の場合は失敗するように初期化子を作成したいと考えています。ディクショナリのメンバ 'subscript'へのあいまいな参照
私はアプローチで明らかなミスを指すように自由に感じなさい、ここにガードを使用するようにしようとしています:
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')または*スロー:
クリス・ラットナーは、現在の動作がここに望ましくない言及しますプロパティが存在しない場合はエラー?それは2つの異なることです。 –
エラーメッセージは誤解を招くようです: 'guard'ステートメントの後の式は、ブール結果またはオプションのバインディング(' let'構文)の評価結果を持たなければなりません。イニシャライザを呼び出す前に入力辞書*を検証することを検討してください。 – vadian
@MartinR、私は、初期化の呼び出し元がなぜ初期化が失敗したのか、呼び出し元がnilを返すことによって得られないコンテキストを知るので、エラーをスローすることを好むでしょう。 –