Sobes.tech
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" хоҳад буд