2017-02-01 12 views
0

Я заранее извиняюсь за задание такого глупого вопроса, но я не совсем понял, что хотел узнать из других ответов. Вот пример кода протокола пользовательского делегата от курса Ray Wenderlich IOSНе совсем понял концепцию пользовательских протоколов, Swift 3

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) 
} 

И нет никакого фактического использования контроллера аргумента, и что didFinishAdding? Насколько я понимаю, didFinishAdding - это просто внешнее имя для внутреннего аргумента item. Но как это работает, как можно понять из тела протокола, что контроллер с именем AddItemViewController отправляет ChecklistItem соответствующему делегату, или это некоторый предопределенный тип функции?

+1

С какого кода у вас этот код? Есть ли конкретный учебник от Ray, для которого вы можете предоставить URL-адрес? –

ответ

0

Здесь мы говорим о соглашении стиля Swift.

didFinishAdding - описание аргумента, которое позволяет пользователю понять, каково это должно быть. Конечно, вы видите, что тип второго аргумента - ChecklistItem, но для того, чтобы разработчик не путался, вы делаете это краткое объяснение, какой элемент должен быть передан функции.

В вашем примере аргумент controller не используется, я думаю, потому что в этой конкретной реализации нет необходимости. Однако это общий стиль делегатов: вы говорите , который сделал действие и , что предмет. Возможно, будет случай, когда вам нужно будет знать, что AddItemViewController добавил элемент.

0

didFinishAdding - это просто помощник для лучшего понимания подписи функции.

В вашем примере «контроллер» не используется, но это только в этом случае. если имущество находится в подписи, вы не вынуждены его использовать :)