プロパティをそれぞれ代入するのは辛い
辛いイニシャライズがあります。
例えば
class Person {
var name: String?
var sex: String?
init() {}
}
let person = Person()
person.name = "alex"
person.sex = "male"
最初にPerson
インスタンスを作ってプロパティを代入していくパターン。プロパティに初期値(ここではnil)を設定してあとで代入します。
例ではname
, sex
プロパティをそれぞれ代入していますがすべての値を確実に代入するかは開発者の責任になってしまいます。
解決策
すべてのプロパティをセットするにはイニシャライザを作りましょう
class Person {
let name: String // not optional!
let sex: String // not optional!
init(name: String, sex: String) {
self.name = name
self.sex = sex
}
}
let person = Person(name: "alex", sex: "male")
値があとから設定されるとき
でもすべてのほしい値が一度に手に入るとは限らないですよね。
ある人物が病院の受付をする場合を想定します。
name
とsex
の値は事前にわかっていますが、受付番号は病院に行かなければ受け取れません。
class Person {
let name: String
let sex: String
var orderId: Int?
init(name: String, sex: String) {
self.name = name
self.sex = sex
}
}
let person = Person(name: "alex", sex: "male")
person.orderId = Hosptal.order(person) // あとから設定
解決策
新しい型をつくりましょう。
class Person {
let name: String
let sex: String
init(name: String, sex: String) {
self.name = name
self.sex = sex
}
}
class Patient {
let name: String
let sex: String
let orderId: Int
init(name: String, sex: String, orderId: Int) {
self.name = name
self.sex = sex
self.orderId = orderId
}
}
let person = Person(name: "alex", sex: "male")
let patient = Patient(name: person.name, sex: person.sex, Hosptal.order(person))
以上です。