Kako se u Swift-u implementira otvaranje (opcionalni, ugovori i drugi mehanizmi)?
sobes.tech АИ
Одговор од АИ
Опционали у Swift представљају тип који може садржати или вредност типа T (обавијена вредност), или nil, што означава одсуство вредности.
Основни механизми за рад са опционалима:
-
Обједињавање опционала (
if let,guard let): Безбедно извлачење вредности из опционала.if let: Извлачи вредност и додељује је привременој константи или променљивој, ако опционал садржи вредност. Код се извршава само у овом случају.let optionalString: String? = "Hello" if let unwrappedString = optionalString { // unwrappedString има тип String }guard let: Извлачи вредност. Ако је опционалnil, извршава се блокelse(обично за излаз из тренутног scope-а). Ако је вредност успешно извучена, доступна је послеguardу тренутном scope-у.func processString(_ optionalString: String?) { guard let unwrappedString = optionalString else { return // Излаз из функције } // unwrappedString типа String је доступан овде }
-
Лансирање опционала (
?): Омогућава позивање својстава, метода и индекса на опционалу. Ако је опционалnilу било којој тачки ланца, цела ланац се прекида, а резултат има тип опционала који садржиnil.class Person { var job: Job? } class Job { var salary: Double? } let person: Person? = Person() person?.job = Job() let salary = person?.job?.salary // salary има тип Double? -
Принудно разпакивање (
!): Небезбедно извлачење вредности. Доводи до грешке у току извршавања (crash), ако опционал садржиnil. Треба користити са великом пажњом, само када је сигурно да опционал нијеnil.let requiredString: String! = "Must be present" // Нејасно извлачење опционала let unwrappedString = requiredString! // Принудно разпакивање let dangerousOptional: String? = nil // let crash = dangerousOptional! // Довешће до грешке -
Оператор нулевог сједињења (
??): Обезбеђује подразумевану вредност ако је опционалnil.let optionalValue: Int? = nil let definiteValue = optionalValue ?? 0 // definiteValue ће бити 0 -
Имплицитно разпакирани опционали (
!): Опционали који се аутоматски разпакивају при коришћењу. Објављују се помоћу!. Треба их користити када је загарантовано да ће вредност бити додељена пре прве употребе, али не и при иницијализацији (нпр. IBOutlets). Ако је вредностnilпри приступу, долази до грешке у току извршавања.var button: UIButton! // Предпоставља се да ће бити иницијализован у viewDidLoad // button.setTitle("Tap me", for: .normal) // Аутоматско разпакивање при коришћењу
"Контракти" у овом контексту нису посебан механизам језика Swift, слично као и у другим језицима. Swift обезбеђује безбедност кроз систем типова, укључујући опционале и контролу приступа, што помаже да се јасно изразе намјере и избегну грешке. Опционали служе као "контракт", указујући на могућност одсуства вредности.