Протокол устанавливает контракт для интерфейса между одним объектом и другим. Тот факт, что методы являются необязательными, просто говорит о том, что вам не нужно реализовывать этот конкретный метод, но вы можете, если ваше приложение потребует его.
Как правило, если вы соответствуете протоколу, для которого все методы являются необязательными, вы делаете это по какой-то причине, а именно, что вы планируете реализовать один или несколько из этих методов. Просто потому, что все методы протокола являются необязательными, это не означает, что вы не будете реализовывать какие-либо из них, а скорее просто выберите, какие из них релевантны в вашей конкретной ситуации.
Например, рассмотрите протокол UITextFieldDelegate
. Вы, как правило, согласны с этим, потому что хотите указать, например, разрешено ли определенным символам вставлять в текстовое поле или что делать, когда нажата клавиша возврата. Иногда вы только хотите реализовать первое. Иногда вы только хотите реализовать последнее. Иногда вы делаете оба. Но только потому, что вы решили реализовать одно или другое, не означает, что вы обязательно хотите сделать другое (но можете, если хотите). Честно говоря, хотя, если вы действительно не хотели реализовывать какие-либо из этих методов, вы, вероятно, даже не захотите указать delegate
текстового поля, а также не указывать, что вы соответствуете протоколу.
Нижняя строка, протокол, который состоит исключительно из необязательных методов, в основном говорит «если вам это нужно, это документированный интерфейс для методов, которые вы можете выбрать для реализации». Протокол по-прежнему очень полезен для установления возможных интерфейсов, но не заставляет вас внедрять те методы, которые вам не нужны.
проверить этот вопрос также http://stackoverflow.com/questions/691246/why-would-i-make-an-all-optional-message-protocol?rq=1 это может помочь вам –
все отличные ответы. комментарий к другому делу был очень полезным. Я думаю, что причина для всех факультативных протоколов в основном используется для делегатов. Я проверил ответ, похожий на другой вопрос, но все предоставленные ответы имеют смысл. Еще раз спасибо всем !!! – Chris