#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) это намного лучше.