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"