- Published on
Swift-da Access Control β Private va Public
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Agar siz shu yerga yetib kelgan bo'lsangiz β endi tashlamang! Kursning eng qiyin qismi ortda qoldi. Optional-lar, struct-lar, class-lar β bularning hammasi Swift dasturlashning asosi, va siz ularni o'tdingiz. Bundan keyingi videolar osonroq va qiziqarliroq bo'ladi, chunki biz ekranlar yaratishni boshlaymiz.
Bu videoda Access Control β ya'ni kirish darajalarini ko'rib chiqamiz. O'tgan videolarda private kalit so'zini bir necha marta ishlatdim, lekin uni to'liq tushuntirmadim. Keling, endi batafsil o'rganaylik.
Access Control nima va nima uchun kerak?
Oddiy qilib aytganda, Access Control β bu ma'lumotlarga kim kirishi va kim o'zgartirishi mumkinligini boshqarish.
Yolg'iz loyihada ishlayotganda bu unchalik muhim ko'rinmaydi β siz ilovangizda nima bo'layotganini o'zingiz bilasiz. Lekin tajriba oshgan sari va loyihalar kattalashgan sari bu juda muhim bo'lib qoladi.
Tajribali dasturchi biror narsa private yoki public deb belgilanganda, u darhol shu ma'lumot qanday yangilanishi mumkinligini tushunadi. Kodni o'qish, ko'rib chiqish yoki xatolarni topishda bu juda katta yordam beradi.
Asosiy qoida: Imkon qadar hamma narsani iloji boricha private qiling.
Misol uchun model yaratish
enum MovieGenre {
case comedy
case action
case horror
}
struct MovieModel {
let title: String
let genre: MovieGenre
let isFavorite: Bool
func updateFavoriteStatus(newValue: Bool) -> MovieModel {
return MovieModel(
title: title,
genre: genre,
isFavorite: newValue
)
}
mutating func updateStatus(to newValue: Bool) {
// mutating versiya
}
}
Bu yerda:
MovieGenreβenum, chunki barcha janrlarni kodni yozayotganda bilamizMovieModelβstruct, chunki bu sof ma'lumot modeliMovieManagerβclass, chunki u ma'lumotlarni boshqaradi va o'zgartiradi
Uch xil kirish darajasi
class MovieManager {
// 1. Public (ochiq) β belgilanmagan, lekin public hisoblanadi
var movie1 = MovieModel(title: "Avatar", genre: .action, isFavorite: false)
// 2. Private (yopiq) β class ichidan ham o'qib, ham o'zgartiriladi
private var movie2 = MovieModel(title: "Step Brothers", genre: .comedy, isFavorite: false)
// 3. Private(set) β tashqaridan o'qish mumkin, lekin faqat class ichidan o'zgartiriladi
private(set) var movie3 = MovieModel(title: "Avengers", genre: .action, isFavorite: false)
func updateMovie3(isFavorite: Bool) {
movie3 = movie3.updateFavoriteStatus(newValue: isFavorite)
}
}
Har bir darajaning farqi
let manager = MovieManager()
// --- 1. PUBLIC ---
// Tashqaridan ham o'qish, ham o'zgartirish mumkin
let someValue = manager.movie1 // β
o'qish
manager.movie1 = manager.movie1.updateFavoriteStatus(newValue: true) // β
o'zgartirish
// Lekin bu "juda ochiq" β yaxshi amaliyot emas
// --- 2. PRIVATE ---
// Tashqaridan na o'qish, na o'zgartirish mumkin
let value2 = manager.movie2 // β xato β tashqaridan o'qib bo'lmaydi
manager.movie2 = ... // β xato β tashqaridan o'zgartirib bo'lmaydi
// Faqat class ichidagi funksiyalar orqali ishlatiladi
// --- 3. PRIVATE(SET) β eng yaxshi amaliyot ---
// Tashqaridan o'qish mumkin, o'zgartirish mumkin emas
let value3 = manager.movie3 // β
o'qish β ishlaydi
manager.movie3 = ... // β xato β tashqaridan o'zgartirib bo'lmaydi
manager.updateMovie3(isFavorite: true) // β
funksiya orqali o'zgartirish β ishlaydi
Nega private(set) eng yaxshi amaliyot?
private(set) ishlatganda:
- Ma'lumotni tashqaridan o'qish mumkin β bu ko'pincha kerak
- Ma'lumotni faqat class ichidan o'zgartirish mumkin β bu xavfsizlik
- Class o'z ichidagi ma'lumotlarni o'zi boshqaradi β bu clean code
Tasavvur qiling, ilovangizda 50 ta fayl bor. Agar movie3 private(set) bo'lsa, uni faqat MovieManager ichida o'zgartirilishini bilasiz β 50 ta faylni tekshirmasdan. Bu kodni o'qishni va xatolarni topishni nihoyatda osonlashtiradi.
Struct ichida ham xuddi shunday
struct MovieModel {
let title: String
let genre: MovieGenre
private(set) var isFavorite: Bool
// Tashqaridan o'zgartirish uchun funksiya
mutating func updateFavoriteStatus(newValue: Bool) {
isFavorite = newValue
}
}
Swift-da barcha kirish darajalar
Hozircha eng ko'p ishlatiladigan uchta bilish yetarli:
| Daraja | Ma'nosi |
|---|---|
| (belgilanmagan) | Public ga teng β hamma joydan o'qib va o'zgartirib bo'ladi |
private | Faqat shu class/struct ichida ishlaydi |
private(set) | Tashqaridan o'qish mumkin, o'zgartirish β faqat ichidan |
Boshqa darajalar ham bor β open, internal, fileprivate β lekin ular asosan o'z framework-ingizni yozayotganda kerak bo'ladi. Hozircha ularga vaqt sarflamasangiz ham bo'ladi.
Xulosa va asosiy qoida
// Yomon amaliyot β hamma narsa ochiq
var movie1 = MovieModel(...)
// Yaxshi amaliyot β faqat kerak bo'lganda ochiq
private(set) var movie3 = MovieModel(...)
// Qoida: iloji boricha hamma narsani private qiling
// Bu kodingizni o'qishni va xatolarni topishni osonlashtiradi
Kod yozishda private belgilashni odat qilib oling. Bu nafaqat yaxshi uslub, balki professional dasturchilarning asosiy talabi.
Rahmat, men Nick, bu Swiftful Thinking va keyingi videoda ko'rishguncha!