Sobes.tech
Junior

Swift тилинде опционалдарды иштетүүнүн кандай жолдору бар?

sobes.tech AI

AIден жооп

  1. Мажбурий ачуу:

    // ! колдонулат, эгер сиз опционалдын мааниси бар экенине ишенсеңиз.
    let optionalValue: String? = "hello"
    let unwrappedValue = optionalValue! // Коркунучтуу, эгер мааниси nil болсо, краш болот
    
  2. Опционал байлоо (if let, guard let):

    // if let - эгер опционал nil эмес болсо, блокду иштетет.
    if let value = optionalValue {
        print(value)
    }
    
    // guard let - эрте чыгуу үчүн колдонулат, эгер опционал nil болсо.
    func processValue(_ value: String?) {
        guard let unwrappedValue = value else {
            print("Мааниси nil")
            return
        }
        print(unwrappedValue)
    }
    
  3. Опционал чынжырлоо (Optional Chaining):

    // Коопсуз түрдө методдорду, мүчөлөрдү же сабскрипттерди чакыруу.
    struct Company {
        var address: Address?
    }
    
    struct Address {
        var street: String?
    }
    
    let company: Company? = Company(address: Address(street: "Main Street"))
    let street = company?.address?.street // Натыйжа опционал String?
    
  4. Нол-коалесцинг оператору (??):

    // Эгер опционал nil болсо, алдын ала маанини берет.
    let name: String? = nil
    let displayName = name ?? "Anonymous" // Эгер name nil болсо, displayName "Anonymous" болот
    
  5. Илгери мажбурланган опционалдар:

    // Типден кийин ! көрүнөт. Компилятор ачык распаковка талап кылбайт, бирок nil болсо, краш болушу мүмкүн.
    let implicitlyUnwrappedString: String! = "this is a string"
    print(implicitlyUnwrappedString.count) // ! талап кылынбайт
    
  6. if case let менен паттерн таануу:

    // Жогорку деңгээлдүү ыкма, enum менен ассоциативдүү маанилер жана опционалдар менен иштөөдө.
    enum Result {
        case success(String)
        case failure
    }
    
    let result: Result? = .success("Operation completed")
    
    if case let .success(message)? = result {
        print("Ийгиликтүү: \(message)")
    }