swift - Инициализация класса UIContextualAction - PullRequest
0 голосов
/ 16 мая 2019

UIContextualAction класс имеет инициализатор со следующей подписью.

public convenience init(style: UIContextualAction.Style, title: String?, handler: @escaping UIContextualAction.Handler)

Экземпляр класса UIContextualAction можно создать с помощью следующего фрагмента кода.

let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
     completion(true)
}

Что я не понимаю, так это способ, которым третий параметр (т.е. обработчик ) передается инициализатору класса.

Почему функция-обработчик передается внутри отдельных фигурных скобок, не передавая ее после передачи значения для параметра delete ?

Есть ли другие способы, которыми мы можем получить такой же вывод?

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Оба способа написания одинаковы:

let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
    completion(true)
}

let action2 = UIContextualAction(style: .normal, title: "Delete", handler: { (action, view, completion) in
    completion(true)
})

Вы можете взглянуть на документацию Trailing Closures :

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

1 голос
/ 16 мая 2019

Поскольку 3-й параметр

let action = UIContextualAction(style: .normal, title: "Delete") { (action, view, completion) in
 completion(true)
}

- это замыкающее замыкание, которое, как вы ожидаете, будет запущено для запуска некоторого связанного кода, когда пользователь нажимает действие удаления, и это не параметр для запуска действия предупреждения

вы также можете указать nil, если вам ничего не нужно делать

let action2 = UIContextualAction(style: .normal, title: "Delete", handler:nil)

https://www.hackingwithswift.com/example-code/language/what-is-trailing-closure-syntax

Что такое синтаксис завершающего замыкания в Swift?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...