Sobes.tech
Junior

Kokie yra būdai apdoroti optionalus Swift kalboje?

sobes.tech AI

Atsakymas iš AI

  1. Priverstinis išpakuojamas:

    // Naudojama !, jei esate įsitikinęs, kad opcionalas turi reikšmę.
    let optionalValue: String? = "hello"
    let unwrappedValue = optionalValue! // Pavojinga, gali sukelti avariją, jei reikšmė yra nil
    
  2. Opcionalus ryšys (if let, guard let):

    // if let - vykdo kodo bloką, jei opcionalas nėra nil.
    if let value = optionalValue {
        print(value)
    }
    
    // guard let - naudojamas ankstyvam išėjimui iš funkcijos ar bloko, jei opcionalas yra nil.
    func processValue(_ value: String?) {
        guard let unwrappedValue = value else {
            print("Reikšmė yra nil")
            return
        }
        print(unwrappedValue)
    }
    
  3. Opcionalus grandinėjimas (Optional Chaining):

    // Saugu iškviesti metodus, savybes ar subskryptus ant opcionalių reikšmių.
    struct Company {
        var address: Address?
    }
    
    struct Address {
        var street: String?
    }
    
    let company: Company? = Company(address: Address(street: "Main Street"))
    let street = company?.address?.street // Rezultatas bus opcionalus String?
    
  4. Nulinės susiliejimo operatorius (??):

    // Teikia numatytą reikšmę, jei opcionalas yra nil.
    let name: String? = nil
    let displayName = name ?? "Anonymous" // Jei name yra nil, displayName bus "Anonymous"
    
  5. Išankstinis išpakuotas opcionalas:

    // Nurodoma su ! po tipo. Kompiliatorius nereikalauja aiškios išpakuotės, bet gali sukelti avariją, jei nil.
    let implicitlyUnwrappedString: String! = "this is a string"
    print(implicitlyUnwrappedString.count) // Nereikalauja !
    
  6. Naudojant if case let su modelio atitikimu:

    // Pažangesnis būdas patikrinti enum su susijusiomis reikšmėmis, įskaitant opcionalius.
    enum Result {
        case success(String)
        case failure
    }
    
    let result: Result? = .success("Operation completed")
    
    if case let .success(message)? = result {
        print("Sėkmė su žinute: \(message)")
    }