سازنده ها (Initializers)
«سازنده (Initializer)» آغازگر ساخت شیء است. یعنی ویژگی ها درست مقدار می گیرند. بنابراین خطاها کمتر می شوند و کد تمیزتر می شود.
سازنده عضو محور و سفارشی
در struct به صورت پیش فرض سازنده عضو محور داریم. همچنین می توانیم سازنده سفارشی تعریف کنیم.
struct User {
var name: String
var age: Int
}
let a = User(name: "Morgan", age: 30)
struct Point {
var x: Int
var y: Int
init(_ x: Int, _ y: Int) {
self.x = x
self.y = y
}
}
let p = Point(1, 2)
سازنده اصلی و کمکی در کلاس
در class سازنده اصلی همه ویژگی ها را مقداردهی می کند. سازنده کمکی میانبر می دهد و باید به self.init زنجیره شود.
class Person {
let name: String
let age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
convenience init(name: String) {
self.init(name: name, age: 0)
}
}
let p1 = Person(name: "Robin", age: 30)
let p2 = Person(name: "Elisabeth")
سازنده ناموفق و پرتاب گر
«ناموفق (Failable)» روی ورودی بد، nil می دهد. «پرتاب گر (Throwing)» خطا پرتاب می کند.
struct Email {
let value: String
init?(_ s: String) {
if s.contains("@") {
value = s
} else {
return nil
}
}
}
enum InitError: Error {
case invalid
}
struct Port {
let number: Int
init(_ n: Int) throws {
guard (1...65535).contains(n) else {
throw InitError.invalid
}
number = n
}
}
گام های عملی
- یک struct بساز و عضو محور را امتحان کن.
- یک سازنده سفارشی با اعتبارسنجی اضافه کن.
- یک کلاس بساز و سازنده کمکی اضافه کن.
لینک های داخلی
پس از سازنده ها، مبحث دی سازنده ها را ببین. همچنین برای نظم کد، کنترل دسترسی را مرور کن.
جمع بندی سریع
- struct، سازنده عضو محور دارد.
- کلاس، اصلی و کمکی دارد.
- ناموفق، روی ورودی بد nil می دهد.
- پرتاب گر، خطا را اعلام می کند.