Sobes.tech
Junior

Опционалҳо дар Swift барои чӣ истифода мешаванд?

sobes.tech AI

Ҷавоб аз AI

Опционалҳо имкон медиҳанд, ки тағирёбанда ё арзиши муайяни навъро нигоҳ дорад, ё nil (надоштани арзиш). Онҳо барои коркарди равшан дар ҳолатҳои, ки арзиш метавонад набошад, истифода мешаванд, пешгирӣ аз хатоҳои "null pointer" (crashҳои дар вақти иҷро) ки дар дигар забонҳо маъмуланд.

Арзиши асосии истифодаи опционалҳо:

  • Бехатарӣ: Компилятори Swift талаб мекунад, ки бо nil равшан кор карда шавад, ки эҳтимолияти хатоҳои вақти иҷро кам мешавад.
  • Равшанӣ: Мумкин аст, ки навъи опционалӣ дар эълони он (?) равшан нишон дода шавад, ки кодро фаҳмидан осонтар мекунад.

Равишҳои кор бо опционалҳо:

  • Баробар кардани маҷбурӣ (Forced Unwrapping): Бо истифода аз аломати изофа (!) пас аз тағирёбандаи опционалӣ. Мушкилотнок, агар арзиш nil бошад, боис ба қатъ мешавад.
    var optionalString: String? = "Hello"
    let unwrappedString = optionalString! // Мушкилотнок, агар optionalString == nil
    
  • Бандии опционалӣ (Optional Binding): Бо истифода аз if let ё guard let барои гирифтани бехатари арзиш, агар он вуҷуд дошта бошад.
    var optionalString: String? = "Hello"
    if let safeString = optionalString {
        // safeString дорои арзиши "Hello" аст, агар optionalString на nil бошад
        print(safeString)
    } else {
        // optionalString == nil
        print("Арзиш нол аст")
    }
    
    func processString(_ optionalString: String?) {
        guard let safeString = optionalString else {
            // optionalString == nil, аз функсия мебарем
            print("Арзиш нол аст, мебарем")
            return
        }
        // safeString дорои арзиши "Hello" аст
        print(safeString)
    }
    
  • Занҷири опционалӣ (Optional Chaining): Имкон медиҳад, ки бехатартар методҳоро даъват кард, ё ба хусусиятҳо ё индексҳо дастрас шуд. Агар ягон пайванд nil бошад, тамоми занҷир nil бармегардонад.
    class MyClass {
        var property: String?
    }
    var myInstance: MyClass? = MyClass()
    myInstance?.property = "Value" // Агар myInstance на nil бошад, хусусиятро таъин мекунад
    let retrievedValue = myInstance?.property // retrievedValue хоҳад шуд Value?
    
  • Ҳамҷоягии бо nil (Nil-Coalescing Operator): Арзиши пешфарзро таъмин мекунад, агар опционал nil бошад.
    let optionalValue: String? = nil
    let defaultValue = "Default"
    let finalValue = optionalValue ?? defaultValue // finalValue хоҳад шуд "Default"