IOS Swift: закрытие (обратные вызовы) против делегатов, когда использовать их?

Лично я предпочитаю callback над делегатом в Swift для простых логических корреляций, потому что он довольно прямолинейный и понятный. В то же время некоторые предпочитают делегат, поскольку делегирование является популярным шаблоном на других языках, таких как С#.

Есть несколько дискуссий, которые я нашел в Интернете:

1. "Почему вы не должны использовать делегатов в Swift?" https://medium.cobeisfresh.com/why-you-shouldn-t-use-delegates-in-swift-7ef808a7f16b#.hqb7zrc1v

2. Apple больше переключается на шаблон обратного вызова https://www.reddit.com/r/swift/comments/2ces1q/closures_vs_delegates/

3. блоков или делегатов? http://blog.stablekernel.com/blocks-or-delegates/

Прочитав эти обсуждения, я все еще не уверен в предпочтении. Я хотел бы знать, когда лучше использовать закрытие и когда лучше использовать делегатов? и причины?

Спасибо!

Ответы

Ответ 1

(Ответ на основании мнения, основанный на мнениях)

Вопросы не должны быть лучше, это должно быть наилучшим решением для проблемы, которую я пытаюсь решить.

Мое простое правило: если что-то требует одной функции в качестве интерфейса, обратный вызов обычно является хорошим решением. Если требуется более одной функции, особенно когда они требуются для основной функции объекта, возможно, что это лучше, чем делегат.

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