- Published on
Swift Advanced: Subscripts qanday ishlaydi va ular nima?
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Subscript o'zi nima?
Kundalik kodlash jarayonida siz massivlar (array) bilan juda ko'p ishlaysiz va uning ichidagi elementni olish uchun quyidagicha kod yozasiz:
let array = ["Bir", "Ikki", "Uch"]
let firstItem = array[0] // "Bir"
Lekin hech o'ylab ko'rganmisiz, nima uchun aynan [0] (kvadrat qavslar) ishlashini? Bu qandaydir "sehr" emas. Bu Subscript deb ataluvchi Swift'dagi maxsus funksiya (yoki shortcut) hisoblanadi. Aslida yuqoridagi amaliyot arka planda quyidagiga o'xshash kodni chaqiradi:
// Pseudo kod
array.subscript(index: 0) -> Element
O'zimizning Subscript yaratamiz!
Biz extension lar yordamida massivga yoki o'zimiz yaratgan struct larga o'zimizning qulay subscript larimizni qo'shishimiz mumkin.
1-Misol: Massiv (Array) uchun yangi Subscript
Aytaylik, qidirayotgan nomimizni bersak, o'sha qiymatni topib beradigan (agar bo'lsa) yordamchi subscript yaratmoqchimiz.
extension Array where Element == String {
// Subscript shunday yoziladi:
subscript(value: String) -> String? {
// Elementlar ichidan birinchi bo'lib mos kelganini qaytarish
return self.first(where: { $0 == value })
}
}
Endi kodimizda buni ishlatish juda qiziq:
let names = ["Ali", "Vali", "Gani"]
// Biz endi index bilan emas, qavs ichiga to'g'ridan-to'g'ri String yozib ishlatamiz:
let topilganIsm = names["Vali"]
// Natija: Optional("Vali")
2-Misol: Struct uchun Subscript
Ko'pincha murakkab ma'lumotlar bilan ishlaganda, ichki (nested) o'zgaruvchilarni tezroq o'qish uchun subscript yozish juda qo'l keladi.
struct Customer {
let name: String
let address: String
// Subscript yaratamiz
subscript(key: String) -> String? {
switch key {
case "name":
return name
case "address":
return address
default:
return nil
}
}
}
Buni ishlashini ko'ring:
let user = Customer(name: "Nick", address: "Main Street")
// Avvalgi odatiy usul:
let userName = user.name
// Subscript usuli:
let userName2 = user["name"]
let userAddress = user["address"]
Garchi funksionallik bir xil bo'lsa-da, ba'zi loyihalarda (Dictionary dagi kabi) ma'lumotlarga moslashuvchan murojaat qilish kerak bo'lganda bu juda qulay yechimdir.
Eslatma: Subscriptlarni haddan tashqari ko'p joyda ishlatish kodingizni boshqa dasturchilar uchun tushunarsiz qilib qo'yishi mumkin. Ularni faqat haqiqatan ham qisqartma (shortcut) mantiqan mos kelgan holatlardagina ishlating.