Я заранее извиняюсь за такой глупый вопрос, но я не совсем понял то, что хотел узнать из других ответов. Вот пример кода пользовательского протокола делегата из курса iOS Рэя Вендерлиха.
protocol AddItemViewControllerDelegate: class {
func addItemViewControllerDidCancel(_ controller: AddItemViewController)
func addItemViewController(_ controller: AddItemViewController,
didFinishAdding item: ChecklistItem) }
Хотя определение протокола вполне ясно, это своего рода контракт, которому необходимо соответствовать, чтобы его можно было использовать. Но вот реализация функции протокола в теле соответствующего класса
func addItemViewController(_ controller: AddItemViewController,
didFinishAdding item: ChecklistItem) {
let newRowIndex = items.count
items.append(item)
let indexPath = IndexPath(row: newRowIndex, section: 0)
let indexPaths = [indexPath]
tableView.insertRows(at: indexPaths, with: .automatic)
dismiss(animated: true, completion: nil)
}
И нет фактического использования аргумента controller, и что такое didFinishAdding? Насколько я понимаю, didFinishAdding — это просто внешнее имя для внутреннего аргумента item. Но как это работает, как можно понять из тела протокола, что контроллер с именем AddItemViewController отправляет ChecklistItem соответствующему делегату, или это какой-то предопределенный тип функции ?