- Published on
SwiftUI-da Funksiyalar va subviewlarni ajratish
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Hammaga xush kelibsiz! Mening ismim Nick, bu β Swiftful Thinking kanali.
Bu videoda body ichidan funksiyalar va view qismlarini ajratib chiqarishni o'rganamiz. Bu majburiy emas va ko'pchilik boshlang'ich kurslar buni umuman ko'rib chiqmaydi. Lekin men buni ishlab chiqarish ilovalarida doim qo'llayman va bu juda foydali odat ekanligiga ishonaman.
Nima uchun bu muhim?
Hozircha kursimizda qilgan ekranlarimiz nisbatan qisqa edi va barcha kod body ichida yaxshi ko'rinardi. Lekin murakkab ko'rinishlar yaratila boshlansa, body juda uzun bo'lib ketadi. Bu ikki muammoga olib keladi:
- O'qish qiyin β uzun
body-da nima bo'layotganini tushunish qiyinlashadi - Xatolarni topish qiyin β ko'p qismli kodda muammoni aniqlash ham mushkul
Shuning uchun body-ni doim toza va tartibli saqlashni tavsiya qilaman. Boshqa dasturchi yoki menejer kodingizga qaraydigan bo'lsa, u nima bo'layotganini darhol tushunishi kerak.
Yangi fayl yaratish
Navigatorda o'ng tugma bosib yangi SwiftUI fayli yarating. Uni ExtractedFunctionsBootcamp deb nomlang va Create tugmasini bosing. Canvas-da Resume bosing.
Boshlang'ich ko'rinish
Oldingi videodagi kabi oddiy ekran quramiz β sariq fon, sarlavha va tugma:
struct ExtractedFunctionsBootcamp: View {
@State var backgroundColor: Color = .pink
var body: some View {
ZStack {
// Fon qatlami
backgroundColor
.ignoresSafeArea(.all)
// Kontent qatlami
VStack {
Text("Sarlavha")
.font(.largeTitle)
Button(action: {
backgroundColor = .yellow
}, label: {
Text("Bosing")
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(10)
})
}
}
}
}
Dastlab fon pushti, tugma bosilganda sariq bo'ladi. Hozircha hech qanday yangilik yo'q β shu erdan funksiyalarni ajratishni o'rganamiz.
1-qism: Funksiyani ajratib chiqarish
Hozir tugma bosilganda backgroundColor = .yellow degan bitta qator ishlaydi. Lekin haqiqiy ilovada tugma bosilganda ma'lumotlar bazasiga murojaat, yuklanish ekrani, ma'lumotlarni yangilash va boshqa ko'p narsa bo'lishi mumkin. Agar bularning hammasini tugma ichiga yozib ketsak, body chalkashib ketadi.
Yechim: bu mantiqni alohida funksiyaga ajratib chiqarish.
struct ExtractedFunctionsBootcamp: View {
@State var backgroundColor: Color = .pink
var body: some View {
ZStack {
backgroundColor
.ignoresSafeArea(.all)
VStack {
Text("Sarlavha")
.font(.largeTitle)
Button(action: {
// Mantiq funksiya ichida β body toza qoladi
buttonPressed()
}, label: {
Text("Bosing")
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(10)
})
}
}
}
// Tugma bosilgandagi mantiq shu yerda
func buttonPressed() {
backgroundColor = .yellow
}
}
Endi body ichida tugma faqat buttonPressed() ni chaqiradi. Barcha mantiq esa alohida funksiyada turibdi.
Foydali maslahat: Funksiya nomiga o'ng tugma bosib
Jump to Definitionni tanlasangiz, Xcode sizni to'g'ridan-to'g'ri o'sha funksiya aniqlangan joyga olib boradi.
Agar faqat bitta qator mantiq bo'lsa, funksiya ajratish shart emas. Lekin mantiq ko'paygan sari β ajratish juda foydali bo'ladi.
2-qism: View qismini ajratib chiqarish
Funksiyalardan tashqari, view qismlarini ham ajratish mumkin. Masalan, ZStack ichidagi kontent qatlamini alohida o'zgaruvchiga olib chiqamiz:
struct ExtractedFunctionsBootcamp: View {
@State var backgroundColor: Color = .pink
var body: some View {
ZStack {
// Fon qatlami
backgroundColor
.ignoresSafeArea(.all)
// Kontent qatlami β alohida o'zgaruvchidan chaqirilmoqda
contentLayer
}
}
// Kontent qatlami alohida o'zgaruvchi sifatida
var contentLayer: some View {
VStack {
Text("Sarlavha")
.font(.largeTitle)
Button(action: {
buttonPressed()
}, label: {
Text("Bosing")
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(10)
})
}
}
// Tugma bosilgandagi mantiq
func buttonPressed() {
backgroundColor = .yellow
}
}
Canvas-da Resume bosib ko'rsangiz, hamma narsa avvalgidek ishlaydi. Lekin endi body juda toza:
backgroundColorβ fon qatlamicontentLayerβ kontent qatlamibuttonPressed()β tugma mantiq
Boshqa dasturchi bu kodga qarasa, darhol tushunadi. Nimadir o'zgartirmoqchi bo'lsa, qaysi qismga kirishini biladi.
To'liq kod
struct ExtractedFunctionsBootcamp: View {
@State var backgroundColor: Color = .pink
var body: some View {
ZStack {
backgroundColor
.ignoresSafeArea(.all)
contentLayer
}
}
var contentLayer: some View {
VStack {
Text("Sarlavha")
.font(.largeTitle)
Button(action: {
buttonPressed()
}, label: {
Text("Bosing")
.font(.headline)
.foregroundColor(.white)
.padding()
.background(Color.black)
.cornerRadius(10)
})
}
}
func buttonPressed() {
backgroundColor = .yellow
}
}
Xulosa
Bu videoda o'rgandik:
- Funksiya ajratish β tugma va boshqa amallar mantiqini
body-dan tashqariga olib chiqish - View ajratish β view qismlarini
var contentLayer: some Viewsifatida alohida o'zgaruvchiga o'rash bodytoza bo'lsa β kod o'qilishi, hamkorlik va xato topish osonlashadiJump to Definitionβ funksiya yoki o'zgaruvchi qaerda aniqlangan ekanini tezda topish usuli
Keyingi videoda bu bir qadam oldinga olamiz β view ichiga butunlay alohida viewlar joylashtirishni o'rganamiz!
Rahmat tomosha qilganingiz uchun! Men β Nick, bu Swiftful Thinking. Keyingi videoda ko'rishamiz!