- Published on
Swiftda Extension
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Swiftda mavjud turlarga yangi funksionallik qo'shishimiz mumkin. Bunga extension yordamida erishishimiz mumkin.
Extension e'lon qilish uchun extension kalit so'zidan foydalanamiz. Masalan,
// class ta'rifi
class Temperature {
...
}
// Temperature classining extension
extension Temperature {
// yangi metodlar qo'shish
}
Bu yerda extension kalit so'zi yordamida Temperature classining kengaytmasini yaratdik.
Endi extension ichida Temperature ga yangi funksionallik qo'shishimiz mumkin.
Misol:
// class ta'rifi
class Temperature {
var celsius: Double = 0 // selsiy
func setTemperature(celsius: Double) {
self.celsius = celsius
print("Selsiy:", celsius)
}
}
// extension e'lon qilish
extension Temperature {
// Temperature classiga yangi metod qo'shish
func convert() {
var fahrenheit = (celsius * 1.8) + 32
print("Farengeyt:", fahrenheit)
}
}
// classni initsializatsiya qilish
let temp1 = Temperature()
temp1.setTemperature(celsius: 16)
// class obyekti yordamida extension metodiga murojaat
temp1.convert()
Natija:
Selsiy: 16.0
Farengeyt: 60.8
Yuqoridagi misolda Temperature classining kengaytmasini yaratdik.
extension Temperature {
// Temperature classiga yangi metod qo'shish
func convert() {
var fahrenheit = (celsius * 1.8) + 32
...
}
}
Bu extension Temperature ga quyidagi funksionalliklarni qo'shadi:
convert()β haroratni selsiydan farengeytga o'zgartiradigan metodfahrenheitβ konvertatsiya natijasini saqlaydiganconvert()ichida e'lon qilingan o'zgaruvchi
Keyin Temperature ning temp1 nomli obyektini yaratdik va uni extension ichida yaratilgan metodga murojaat qilish uchun ishlatdik.
// class obyekti yordamida extension metodiga murojaat
temp1.convert()
Class ichida e'lon qilingan propertylar (
celsiuskabi) extensionda ham ishlatilishi mumkin.
Extensionda Computed property
Swiftda extensionlarga stored propertylar qo'sha olmaymiz. Masalan,
extension Circle {
// stored property
var radius: Int // xato kod
}
Ammo Swift extensionga computed property qo'shish imkonini beradi. Masalan,
extension Circle {
// computed property
var area: Double {
...
}
}
Bu yerda area β extension tanasida e'lon qilingan computed property.
Misol:
class Circle {
var radius: Double = 0 // radius
}
extension Circle {
// computed property e'lon qilish
var area: Double {
return 3.14 * radius * radius
}
}
let circle1 = Circle()
circle1.radius = 5
print("Yuza:", circle1.area)
Natija:
Yuza: 78.5
Yuqoridagi misolda Circle classining extension ini yaratdik, bu yerda area nomli computed property e'lon qildik.
Bu property radius qiymatiga asoslanib doiraning yuzasini hisoblab beradi.
var area: Double {
return 3.14 * radius * radius
}
Protocol Extension
Swiftda protocollarni ham kengaytirishimiz mumkin. Masalan,
// protocol ta'rifi
protocol Brake {
func applyBrake()
}
// protocolni kengaytirish
extension Brake {
func applyBrake() {
print("Tormoz bosildi")
}
}
// Brake protocoliga mos keladigan class e'lon qilish
class Car: Brake {
var speed: Int = 0 // tezlik
}
let car1 = Car()
car1.speed = 61
print("Tezlik:", car1.speed)
// kengaytirilgan protocolga murojaat
car1.applyBrake()
Natija:
Tezlik: 61
Tormoz bosildi
Yuqoridagi misolda applyBrake() funksiyasini belgilaydigan Brake protocolini yaratdik.
Biz Brake protocolini kengaytirib, uning ichida applyBrake() funksiyasining tanasini e'lon qildik.
// protocolni kengaytirish
extension Brake {
func applyBrake() {
print("Tormoz bosildi")
}
}
Endi Car classi Brake protocoliga mos kelgani uchun:
class Car: Brake {
...
}
car1 obyekti yordamida kengaytirilgan protocolga murojaat qilishimiz mumkin.
// kengaytirilgan protocolga murojaat
car1.applyBrake()