Избыточное сообщение об ошибке соответствия Swift 2

Я обновил свой проект до Swift 2 и получил кучу redundant conformance of XXX to protocol YYY . Это происходит особенно часто (или всегда), когда class соответствует CustomStringConvertible . Также место с Equatable .

 class GraphFeatureNumbersetRange: GraphFeature, CustomStringConvertible { // <--- get the error here ... } 

Я подозреваю, что мне не нужно явно указывать протокол, когда я реализую var description: String { get } или любые методы, которые требуется протоколу. Должен ли я просто следовать инструкциям fixit и удалять все это? Теперь Swift автоматически определяет соответствие, если class реализует все методы протокола?

Вы получите это сообщение об ошибке в Xcode 7 (Swift 2), если подclass объявляет соответствие протоколу, который уже унаследован от суперclassа. Пример:

 class MyClass : CustomStringConvertible { var description: String { return "MyClass" } } class Subclass : MyClass, CustomStringConvertible { override var description: String { return "Subclass" } } 

Журнал ошибок показывает:

 main.swift: 10: 27: ошибка: избыточное соответствие «подclassа» протоколу «CustomStringConvertible»
 class Подclass: MyClass, CustomStringConvertible {
                           ^
 main.swift: 10: 7: note: «Подclass» наследует соответствие протокола «CustomStringConvertible» от суперclassа
 class Подclass: MyClass, CustomStringConvertible {
       ^

Удаление соответствия протокола из декларации подclassа решает проблему:

 class Subclass : MyClass { override var description: String { return "Subclass" } } 

Но суперclass должен объявить соответствие явно, он не выводится автоматически из существования свойства description .

Для гуглеров я также получил эту ошибку, включив SwiftyJson в мою целевую аудиторию и добавив быстрый тестовый class, так как это привело к тому, что SwiftyJson снова был скомпилирован, и объявляет NSNumber как Comparable. Решение заключалось только в том, чтобы включить его в целевую программу.

Дело в том, что ваш GraphFeatureNumbersetRange является подclassом NSObject. Что в свою очередь уже соответствует CustomStringConvertible ! Это оно! Просто удалите этот избыточный протокол. Теперь вы объявляете это дважды! 🙂

  • В Xcode, как подавлять все предупреждения в определенных исходных файлах?
  • Постоянная настройка LLDB (в Xcode 4.3.2), чтобы не останавливаться на сигналах
  • Как указать несколько целей в моем подкоде для моего проекта Xcode?
  • Храните iPhone Simulator в фоновом режиме во время выполнения тестов в Xcode?
  • Связывание статических библиотек, совместно использующих статическую библиотеку
  • Исправлен файл 'project.pch' был изменен, так как предварительно скомпилированный заголовок был создан ошибкой в ​​Xcode
  • C ++ не показывает cout в консоли Xcode, но отлично работает в терминале
  • Xcode - установить средства командной строки
  • как изменить название проекта Xcode
  • Преобразование раскадровки с iPhone на iPad
  • Как полностью переименовать проект Xcode (т.е. включая папки)?
  • Давайте будем гением компьютера.