Необязательное требование бывает только у @objc протокола. Метод можно не реализовать. Перед вызовом проверяют, что он есть: опциональная цепочка или responds(to:).
Чистому Swift-протоколу это не нужно. Там либо метод обязателен, либо у него есть реализация в расширении. Вызов через witness table не умеет мягко промахнуться, а objc_msgSend умеет.