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)")
    }