2016-09-06 3 views
2

Захватив параметр функции в замыканииSwift: фиксирует параметр функции, в пределах замыкания, удерживает его сильно?

func someFunction(tableView: UITableView) -> (() ->()) { 

    return { [weak self] in 

     self?.someOtherFunction() { 
      tableView.performTask() 
     } 

    } 

} 

Если да, то, что синтаксис для обеспечения параметра Tableview является слабым, в приведенном выше примере?

ответ

1

Параметры захвата захвата сильно по умолчанию. В большинстве распространенных случаев закрытия вы получаете доступ к свойствам, объявленным в self, без учета других ссылок, поэтому достаточно сделать self слабым. В вашем случае необходимо расширить список захвата закрытия и включает tableView к нему:

func someFunction(tableView: UITableView) -> (() ->()) { 
    return { [weak self, weak tableView] in 
     self?.someOtherFunction() { 
      tableView?.performTask() 
     } 
    } 
} 

Вы можете прочитать больше о списках захвата в ARC документации:

Вы решаете сильный опорный цикл между замыканием и класс , определяя список захвата как часть определениязакрытия. Список захвата определяет правила, используемые при записи одного или нескольких ссылочных типов в корпусе закрывания. Как и в случае с сильными ссылочными циклами между двумя экземплярами класса, вы объявляете, что фиксированная ссылка является слабым или недействительным, а не ссылкой .

Смежные вопросы