Я переписываю некоторый код для добавления заданий в массив замыканий, а не для их непосредственного выполнения:
var someObject: SomeType?
var jobsArray: [() -> ()] = []
// before rewriting
doExpensiveOperation(someObject!.property)
// 1st attempt at rewriting
jobsArray.append {
doExpensiveOperation(someObject!.property)
}
Однако, поскольку значение someObject может измениться до выполнения замыкания, яТеперь добавьте список замыканий следующим образом:
// 2nd attempt at rewriting
jobsArray.append { [someObject] in
doExpensiveOperation(someObject!.property)
}
Будем надеяться, что если, скажем, впоследствии для someObject будет установлено значение nil до выполнения замыкания, замыкание все равно получит доступ к предполагаемому экземпляру.
НоКаков наилучший способ справиться с возможностью того, что значение .property может измениться до выполнения замыкания?Есть ли лучший способ, чем этот?
// 3rd attempt at rewriting
let p = someObject!.property
jobsArray.append {
doExpensiveOperation(p)
}
Я не очень заинтересован в этом решении, потому что это означает изменение исходной строки кода.Я бы предпочел это, но это не работает:
// 4th attempt at rewriting
jobsArray.append { [someObject!.property] in
doExpensiveOperation(someObject!.property)
}
Довольно плохо знаком со Swift, так что все указания с благодарностью получены.Спасибо!