- Published on
SwiftUI-da ternary operatorlar
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Hammaga xush kelibsiz! Mening ismim Nick, bu β Swiftful Thinking kanali.
Bu videoda ternary operatorlarni o'rganamiz. Ternary operator β if-else ni bitta qatorga siqgan qisqa yozuv usulidir. SwiftUI-da u modifier-larni shartli o'zgartirish va animatsiyalar uchun juda ko'p ishlatiladi.
Bu videoga o'tishdan oldin oldingi videodagi
if-elseshartli operatorlarini tushunib olish tavsiya etiladi.
Yangi fayl yaratish
Navigatorda o'ng tugma bosib yangi SwiftUI fayli yarating. Uni TernaryBootcamp deb nomlang va Create tugmasini bosing. Canvas-da Resume bosing.
Muammo: if-else bilan ikki xil element
Avval oddiy if-else yondashuvi ko'ramiz:
struct TernaryBootcamp: View {
@State var isStartingState: Bool = false
var body: some View {
VStack(spacing: 20) {
Button("Holat: \(isStartingState.description)") {
isStartingState.toggle()
}
if isStartingState {
RoundedRectangle(cornerRadius: 25)
.fill(Color.red)
.frame(width: 200, height: 100)
} else {
RoundedRectangle(cornerRadius: 25)
.fill(Color.blue)
.frame(width: 200, height: 100)
}
Spacer()
}
}
}
Bu kod ishlaydi, lekin ikki muammosi bor:
- Samarasiz UI β har safar yangi element chiziladi va o'chiriladi
- Takroriy kod β faqat rang farq qilsa-da, butun
RoundedRectangleikki marta yozilgan
Yechim: ternary operator
Ternary operator yozilishi:
shart ? true_qiymat : false_qiymat
?β "agar true bo'lsa" degan ma'noni bildiradi:β "agar false bo'lsa" degan ma'noni bildiradi
Bitta element saqlab, faqat rangini shartli o'zgartiramiz:
struct TernaryBootcamp: View {
@State var isStartingState: Bool = false
var body: some View {
VStack(spacing: 20) {
Button("Holat: \(isStartingState.description)") {
isStartingState.toggle()
}
RoundedRectangle(cornerRadius: 25)
.fill(isStartingState ? Color.red : Color.blue)
.frame(width: 200, height: 100)
Spacer()
}
}
}
Endi bitta RoundedRectangle bor, faqat uning rangi o'zgaradi. Bu ham samaraliroq, ham kodi qisqaroq.
Bir nechta modifier-ni shartli o'zgartirish
Ternary operator istalgan modifier-ga qo'llanishi mumkin β burchak radiusi, o'lcham, matn va hokazo:
struct TernaryBootcamp: View {
@State var isStartingState: Bool = false
var body: some View {
VStack(spacing: 20) {
Button("Holat: \(isStartingState.description)") {
isStartingState.toggle()
}
// Matn ham ternary bilan o'zgaradi
Text(isStartingState ? "Boshlang'ich holat" : "Tugash holati")
RoundedRectangle(cornerRadius: isStartingState ? 25 : 0)
.fill(isStartingState ? Color.red : Color.blue)
.frame(
width: isStartingState ? 200 : 50,
height: isStartingState ? 400 : 50
)
Spacer()
}
}
}
Tugma bosilganda bir vaqtda to'rtta narsa o'zgaradi:
- Matn matni
- Burchak radiusi (yumaloq β o'tkir)
- Kengligi va balandligi
- Rangi
Hammasi bitta @State o'zgaruvchisi orqali boshqarilmoqda.
if-else va ternary operator β taqqoslash
| Holat | if-else | Ternary |
|---|---|---|
| Bir nechta element ko'rsatish/yashirish | β Mos | β Mos emas |
| Bitta elementning modifier-ini o'zgartirish | β οΈ Uzun | β Qisqa |
| Animatsiyalar bilan ishlash | β οΈ Murakkab | β Qulay |
| O'qish qulayligi | β Aniq | β Qisqa |
Qoida: elementni to'liq ko'rsatish yoki yashirish kerak bo'lsa β if-else. Bitta elementning xususiyatini o'zgartirish kerak bo'lsa β ternary operator.
Xulosa
Bu videoda o'rgandik:
- Ternary operator β
shart ? true_qiymat : false_qiymatshaklidagi qisqaif-else ?β true bo'lgandagi qiymat:β false bo'lgandagi qiymat- Ternary operator
.fill(),.frame(),.cornerRadius()va boshqa istalgan modifier-ga qo'llanadi if-elseyangi element yaratadi, ternary esa mavjud elementning xususiyatini o'zgartiradi β bu animatsiyalar uchun muhim
Keyingi videolarda animatsiyalar bilan ishlashda ternary operatordan ko'p foydalanamiz!
Rahmat tomosha qilganingiz uchun! Men β Nick, bu Swiftful Thinking. Keyingi videoda ko'rishamiz!