次のコードを使用して、単純なモデルクラスを定義しようとしています。これは、(json-)辞書をパラメーターとして使用する、失敗可能な初期化子です。初期化子はnil
、ユーザー名が元のjsonで定義されていない場合に返されます。
1.コードがコンパイルされないのはなぜですか?エラーメッセージは言う:
イニシャライザからnilを返す前に、クラスインスタンスのすべての格納されたプロパティを初期化する必要があります。
それは意味がありません。戻る予定があるのに、なぜこれらのプロパティを初期化する必要があるのnil
ですか?
2.私のアプローチは適切ですか、それとも私の目標を達成するための他のアイデアや一般的なパターンはありますか?
class User: NSObject {
let userName: String
let isSuperUser: Bool = false
let someDetails: [String]?
init?(dictionary: NSDictionary) {
if let value: String = dictionary["user_name"] as? String {
userName = value
}
else {
return nil
}
if let value: Bool = dictionary["super_user"] as? Bool {
isSuperUser = value
}
someDetails = dictionary["some_details"] as? Array
super.init()
}
}
canSetCalculableProperties
ブール値パラメーターを追加して、初期化者がその場で作成できるプロパティと作成できないプロパティを計算できるようにしました。たとえば、dateCreated
キーが見つからず、canSetCalculableProperties
パラメーターがtrueであるため、その場でプロパティを設定できる 場合は、現在の日付に設定します。