Published on

Swiftda Extension

Authors

Bilimingizni sinab ko'ring!

20 ta savol Β· ~20 daqiqa

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:

Swift
Extension
// 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() { let 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()

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 metod
  • fahrenheit β€” konvertatsiya natijasini saqlaydigan convert() 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 (celsius kabi) 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:

Swift
Computed Property
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)

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,

Swift
Protocol Extension
// 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()

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()
Buy mea coffee