Junior
Опционалҳо чистанд ва онҳо дар забони Swift чӣ нақш доранд?
sobes.tech AI
Ҷавоб аз AI
Опционал дар Swift — навъи аст, ки метавонад дорои арзиш бошад ё набошад (мумкин аст nil бошад).
Ролҳои опционал:
- Ҳамоҳангсозии норасогии арзишҳо (бехатарии nil).
- Пешгирии хатоҳои дастрасӣ ба nil дар вақти иҷро (crash).
- Тартиби равшан дар коди, ки дар он ҷойҳо арзиш метавонад норасбошад.
Концептҳои асосӣ:
- Эълони опционал:
ValueType?ёOptional<ValueType> - Таъин кардани nil: ба опционал метавонад
nilтаъин шавад. - Баровардани маҷбурӣ (
!): арзишро мебарорад, агар вуҷуд дошта бошад, дар ғайри ҳол хатои фаталӣ меорад. - Бандии опционалӣ (
if let,guard let): ба таври бехатар арзишро мебарорад, агарnilнабошад, ва як константа ё тағйирёбандаи муваққатӣ месозад. - Занҷири опционалӣ (
?.): имкон медиҳад, ки методҳоро бехатар даъват кард, ё ба хусусиятҳо ё индексҳо дастрасӣ пайдо кард. - Оператори ҳамҷоякунӣ бо nil (
??): арзиши пешфарзро пешниҳод мекунад, агар опционалnilбошад.
Масаланҳои истифода:
// Эълони Int опционалӣ
var age: Int?
// Таъин кардани арзиш
age = 30
// Баровардани маҷбурӣ (бехатар нест, агар age == nil)
// let unwrappedAge = age!
// Бандии опционалӣ бо if let
if let currentAge = age {
print("Синну сол: \(currentAge)") // Агар age не nil бошад, иҷро мешавад
} else {
print("Синну соли номаълум") // Агар age nil бошад, иҷро мешавад
}
// Занҷири опционалӣ
struct Person {
var name: String
var address: Address?
}
struct Address {
var street: String
}
var person: Person? = Person(name: "Alice", address: Address(street: "Main St"))
// кӯшиши гирифтани кӯча тавассути занҷири опционалӣ
let streetName = person?.address?.street // streetName хоҳад буд String?
// Оператори ҳамҷоякунӣ бо nil
let displayedStreet = streetName ?? "Кӯчаи ношинохта"
print(displayedStreet) // Натиҷа "Main St" хоҳад буд