Initsializatorlar
Swift initsializatorlari
Obyektni sozlashni designated, convenience va memberwise initsializatorlar yordamida yarating va moslashtiring.
Memberwise va maxsus init
Struct’lar standart holatda memberwise (a’zolar bo‘yicha) initsializatorga ega bo‘ladi.
Shuningdek, o‘zingizning maxsus initsializatorlaringizni ham e’lon qilishingiz mumkin.
Sintaksis: init(params) { self.prop = ... }
Misol
struct User { var name: String; var age: Int }
let a = User(name: "Morgan", age: 30) // memberwise
struct Point {
var x: Int, y: Int
init(_ x: Int, _ y: Int) { self.x = x; self.y = y }
}
let p = Point(1, 2)
Ushbu misolda oddiy struct uchun memberwise initsializator va pozitsion parametrli maxsus initsializator ko‘rsatilgan.
Sinfdagi designated va convenience initsializatorlar
Sinflar saqlanadigan xususiyatlarni to‘liq initsializatsiya qilish uchun designated (asosiy) initsializatorlardan, qisqa yo‘llarni taqdim etish uchun esa convenience (yordamchi) initsializatorlardan foydalanadi.
Sintaksis:
init(...)(designated)convenience init(...)(self.initni chaqirishi shart)
Misol
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")
Convenience initsializator designated initsializatorga murojaat qilish (delegation) orqali age uchun standart qiymatni taqdim etadi.
Failable va throwing init
Noto‘g‘ri kiritilgan ma’lumotda nil qaytarish uchun failable initsializatorlardan, xatolar haqida signal berish uchun esa throwing initsializatorlardan foydalaning.
Sintaksis:
init?init throws
Misol
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 }
}
Ushbu misolda email uchun failable initsializator va port oralig‘ini tekshirish uchun throwing initsializator ko‘rsatilgan.
Maslahat: Oddiy qiymat tiplari uchun memberwise initsializatorlarni afzal ko‘ring; tekshiruvni (validation) maxsus initsializatorlarga qo‘shing.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
