- Published on
Swiftda metodlar
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Swiftda class ichida e'lon qilingan funksiya metod deyiladi. Masalan,
class Person {
. . .
// metodlarni e'lon qilish
func greet() {
// metod tanasi
}
}
Bu yerda greet() β Person classi ichida e'lon qilingan metod. Metodlar haqida o'rganishdan oldin swiftdagi class va struct qanday ishlashini bilib olish kerak.
Misol:
class Person {
// metod e'lon qilish
func greet() {
print("Salom!")
}
}
var nick = Person()
// metodga murojaat
nick.greet()
Natija:
Salom!
Yuqoridagi misolda Person classi ichida greet() nomli metod yaratdik. Bu yerda nick obyekti orqali metodga murojaat qildik.
// metodga murojaat
nick.greet()
greet() metodi shunchaki "Salom!" matnini chop etadi.
Misol:
// class yaratish
class Hall {
var length = 0.0 // uzunlik
var breadth = 0.0 // kenglik
var height = 0.0 // balandlik
// yuzani hisoblash metodi
func calculateArea() {
print("Xonaning yuzasi =", length * breadth)
}
// hajmni hisoblash metodi
func calculateVolume() {
print("Xonaning hajmi =", length * breadth * height)
}
}
// Hall classidan obyekt yaratish
var hall1 = Hall()
hall1.length = 42.5
hall1.breadth = 30.8
hall1.height = 45.2
// calculateArea() metodiga murojaat
hall1.calculateArea()
// calculateVolume() metodiga murojaat
hall1.calculateVolume()
Natija:
Xonaning yuzasi = 1309.0
Xonaning hajmi = 59166.8
Yuqoridagi misolda Hall nomli class yaratdik, uning ikkita metodi bor:
calculateArea()β xonaning yuzasini hisoblaydicalculateVolume()β xonaning hajmini hisoblaydi
Bu metodlar class ichida e'lon qilingani uchun ularga hall1 obyekti orqali murojaat qildik.
hall1.calculateArea()
hall1.calculateVolume()
Static metodlar
Oldingi misollarda metodlarga obyekt orqali murojaat qilgan edik. Ammo obyekt yaratmasdan ham murojaat qilinadigan metodlar mavjud.
Bunday metodlar static metodlar deyiladi. Swiftda static metod yaratish uchun static kalit so'zidan foydalanamiz. Masalan,
class Calculator {
// static metod
static func add() {
...
}
}
Bu yerda add() β static metod.
Static metodga murojaat qilish uchun klass nomidan foydalanamiz. Masalan,
// static metodga murojaat
Calculator.add()
Misol:
class Calculator {
// non-static metod
func multiply(num1: Int, num2: Int) -> Int {
return num1 * num2
}
// static metod
static func add(num1: Int, num2: Int) -> Int {
return num1 + num2
}
}
// Calculator classidan obyekt yaratish
var obj = Calculator()
// static metodga murojaat
var result2 = Calculator.add(num1: 2, num2: 3)
print("2 + 3 =", result2)
// non-static metodga murojaat
var result1 = obj.multiply(num1: 2, num2: 2)
print("2 * 2 =", result1)
Natija:
2 + 3 = 5
2 * 2 = 4
Yuqoridagi misolda Calculator nomli class yaratdik. Class ichida static metod: add() va non-static metod: multiply() mavjud.
Bu yerda:
Calculator.add()β static metod, klass nomi orqali chaqiriladiobj.multiply()β non-static metod, obyekt orqali chaqiriladi
Static metod β klass turiga tegishli (obyekt emas), shuning uchun ularga klass nomi orqali murojaat qilamiz.
Xuddi shunday,
structichida ham static metodlar yaratish mumkin. Ularga struct nomi orqali murojaat qilinadi.
Metodlarda self propertysi
Ba'zan property nomi va metod parametri bir xil bo'lishi mumkin. Masalan,
var physics = 0
func checkEligibility(physics: Int) {
...
}
Bu yerda property va metod parametri bir xil nomga ega: physics.
Bunday holatlarda noaniqlik yuzaga kelishi mumkin. Ularni farqlash uchun self propertysi ishlatiladi. self β metoddagi joriy obyektga murojaat qiladi.
Misol:
class Marks {
var physics = 0 // fizika bali
func checkEligibility(physics: Int) {
// self propertysi ishlatilmoqda
if (self.physics < physics) {
print("Qabul uchun nomzod emas")
}
else {
print("Qabul uchun nomzod")
}
}
}
var student1 = Marks()
student1.physics = 28
student1.checkEligibility(physics: 50)
Natija:
Qabul uchun nomzod emas
Yuqoridagi misolda property va metod parametri uchun bir xil physics nomini ishlatdik.
Ularni farqlash uchun checkEligibility() metodi ichida self propertysi ishlatildi:
if (self.physics < physics) {
...
}
Bu yerda:
self.physicsβstudent1obyektining propertysi, qiymati28physicsβ metod parametri, qiymati50
Shart (28 < 50) bajarilgani uchun if ichidagi kod ishlaydi.
Mutating metodlar
Swiftda class yoki struct ichidagi propertylarni metodlar ichidan o'zgartira olmaymiz. Masalan,
struct Employee {
var salary = 0.0 // maosh
...
func salaryIncrement() {
// Xato kod
salary = salary * 1.5
}
}
Bu yerda struct β value type bo'lgani uchun salary qiymatini o'zgartirishga urinish xatoga olib keladi.
Ammo value type propertylarini metod ichidan o'zgartirish kerak bo'lsa, metod e'lon qilishda mutating kalit so'zini ishlatishimiz kerak.
Misol:
struct Employee {
var salary = 0 // maosh
// mutating metodini e'lon qilish
mutating func salaryIncrement(increase: Int) {
// salary propertyni o'zgartirish
salary = salary + increase
print("Oshirilgan maosh:", salary)
}
}
var employee1 = Employee()
employee1.salary = 20000
employee1.salaryIncrement(increase: 5000)
Natija:
Oshirilgan maosh: 25000
Yuqoridagi misolda Employee nomli struct yaratdik. E'tibor bering:
mutating func salaryIncrement(increase: Int) {
// salary propertyni o'zgartirish
salary = salary + increase
...
}