Sobes.tech
Junior

Koji su načini obrade opcionalnih u jeziku Swift?

sobes.tech АИ

Одговор од АИ

  1. Prisilno raspakivanje:

    // Koristi se !, ako ste sigurni da opcional sadrži vrednost.
    let optionalValue: String? = "zdravo"
    let unwrappedValue = optionalValue! // Opasno, može izazvati pad ako je vrednost nil
    
  2. Opcionalno vezivanje (if let, guard let):

    // if let - izvršava blok koda ako opcional nije nil.
    if let value = optionalValue {
        print(value)
    }
    
    // guard let - koristi se za rano izlazak iz funkcije ili bloka ako je opcional nil.
    func processValue(_ value: String?) {
        guard let unwrappedValue = value else {
            print("Vrednost je nil")
            return
        }
        print(unwrappedValue)
    }
    
  3. Lančano povezivanje opcionalnih (Optional Chaining):

    // Omogućava sigurno pozivanje metoda, svojstava ili subskripta na opcionalnim vrednostima.
    struct Company {
        var address: Address?
    }
    
    struct Address {
        var street: String?
    }
    
    let company: Company? = Company(address: Address(street: "Main Street"))
    let street = company?.address?.street // Rezultat će biti opcionalni String?
    
  4. Operator spajanja null (??):

    // Pruža podrazumevanu vrednost ako je opcional nil.
    let name: String? = nil
    let displayName = name ?? "Nepoznato" // Ako je name nil, displayName će biti "Nepoznato"
    
  5. Implicitno razpakovani opcionalni:

    // Otkriva se sa ! nakon tipa. Kompajler ne zahteva eksplicitno razpakivanje, ali može izazvati pad ako je nil.
    let implicitlyUnwrappedString: String! = "ovo je string"
    print(implicitlyUnwrappedString.count) // Ne zahteva ! za pristup članovima
    
  6. Korišćenje if case let sa uzorkom poklapanja:

    // Napredniji način za proveru enum sa povezanim vrednostima, uključujući opcionalne.
    enum Result {
        case success(String)
        case failure
    }
    
    let result: Result? = .success("Operacija završena")
    
    if case let .success(message)? = result {
        print("Uspeh sa porukom: \(message)")
    }