Published on

SwiftUI-da ternary operatorlar

Authors

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-else shartli 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 RoundedRectangle ikki 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

Holatif-elseTernary
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_qiymat shaklidagi qisqa if-else
  • ? β€” true bo'lgandagi qiymat
  • : β€” false bo'lgandagi qiymat
  • Ternary operator .fill(), .frame(), .cornerRadius() va boshqa istalgan modifier-ga qo'llanadi
  • if-else yangi 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!

Buy mea coffee