Xcode 8 говорит: «Вы хотите добавить заглушку?» Как мне ответить?

#xcode8

#xcode8

Вопрос:

В Xcode 8, если вы объявляете, что класс (или структура) соответствует протоколу, но не внедрили требуемые методы (функции?) Xcode выдаст это сообщение «Тип» ClassName не соответствует протоколу « ProtocolName «, что верно.

Если вы откроете сообщение об ошибке, щелкнув треугольник раскрытия, вы увидите ряд элементов с серыми значками восклицательных знаков. Каждый элемент говорит: «Протокол требует функции… вы хотите добавить заглушку? » Я действительно хочу добавить заглушку! Как мне сказать ему добавить заглушку для меня?

Комментарии:

1. Кажется, в Xcode 9 это намного лучше.

Ответ №1:

Ответ raphh правильный, но xcode здесь все еще немного глючит (по крайней мере, для меня),

Если вы не выберете Fix-it нужное после компиляции, знак точки преобразуется в восклицательный знак, и вы не сможете заставить его появиться снова, если не попытаетесь построить еще раз.

Сразу после сборки: значок точечной ошибки

Когда вы не делаете Fix-it это сразу: значок ошибки с восклицательным знаком

Вам нужно выполнить повторную сборку, чтобы снова получить значок точки, когда у вас есть несколько методов для реализации, и вы сделали Fix-it для первого.

Комментарии:

1. У меня была такая же проблема, но я не могу найти кнопку «исправить это». Я наконец нахожу кнопку после ПЕРЕСТРОЙКИ!

Ответ №2:

Просто нажмите Fix-it , и Xcode добавит вам заглушку для того метода, который вам нужно реализовать.

Вот так. Смотрите : введите описание изображения здесь

Спасибо Xcode 8, наконец-то!

Комментарии:

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

2. в моем случае он отображается снова и снова для добавления материалов протокола, которые я уже добавлял 2 раза…

Ответ №3:

Да, нажмите «исправить», xcode добавит необходимые методы и переменные, как указано в вашем протоколе, и еще одна вещь: Xcode добавит переменные с надлежащим разрешением на чтение и запись в класс, реализующий протокол.

Например: в вашем протоколе, если вы объявляете переменную get,set, а в вашей структуре / классе вы объявляете ее как свойство ‘let’, тогда Xcode выдаст сообщение об ошибке «Вы хотите добавить заглушку протокола», когда вы нажимаете «Исправить», теперь добавляется ‘var’свойство в классе / структуре, соблюдающем протокол, для получения, установите свойство в протоколе

 protocol VoiceAssistant {
  var name: String {get}
  var voice: String {get set}
}

struct Siri: VoiceAssistant {

 var voice: String //xcode added this, when you click 'fix it' for protocol stub
 let name = "Siri"   

 let voice = "Voice" //added by me, Compilation Error: voice is not settable, but protocol requires it.
}
  

Комментарии:

1. Изначально этот вопрос касался Xcode 8, но в текущем Xcode (9) это намного лучше.