Junior — Middle
Պետք է օգտագործել escape մեխանիզմ՝ փակագծերը փոխանցելիս որպես արգումենտներ։
sobes.tech AI
Պատասխան AI-ից
Swift- ում, փակագծեր նախفرضում non-escaping են, ինչը նշանակում է, որ դրանք չեն կարող պահվել և կանչվել այն բանից հետո, երբ այն ֆունկցիան ավարտվի, որի մեջ դրանք փոխանցվել են:
Եթե անհրաժեշտ է պահել և ավելի ուշ կանչել փակագիծը (օրինակ՝ ասինխրոնային կանչում, callback), ապա այն պետք է նշվի որպես @escaping:
Օրինակ՝
func performAsyncTask(completion: @escaping () -> Void) {
DispatchQueue.global().async {
// ինչ-որ աշխատանք
completion() // ավելի ուշ կանչում ենք փակագիծը
}
}
Եթե փակագիծը օգտագործվում է միայն ֆունկցիայի ներսում և չի պահվում, @escaping անհրաժեշտ չէ:
Այսպիսով, escaping մեխանիզմը պետք է օգտագործել միայն այն ժամանակ, երբ փակագիծը կարող է կանչվել ֆունկցիայի դուրս գալուց հետո, որի մեջ այն փոխանցվել է։