다음 코드를 사용하여 간단한 모델 클래스를 정의하려고 시도하며 (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 이기 때문에 즉시 속성을 설정할 수있는 경우 현재 날짜로 설정합니다.