Избыточное соответствие & lt; HomeTabBarViewController & rdquo; к протоколу «UITabBarControllerDelegate» iOS [дубликат]

Как упоминалось выше:

Разница заключается в определении области. var привязан к ближайшему функциональному блоку, а let привязан к ближайшему закрывающему блоку, который может быть меньше функционального блока. Оба являются глобальными, если вне любого блока. Давайте посмотрим на пример:

blockquote>

Example1:

В обоих моих примерах у меня есть функция myfunc. myfunc содержит переменную myvar, равную 10. В моем первом примере я проверяю, равен ли myvar 10 (myvar==10). Если да, я agian объявляю переменную myvar (теперь у меня есть две переменные myvar), используя ключевое слово var и присваиваю ей новое значение (20). В следующей строке я напечатаю его значение на моей консоли. После условного блока я снова распечатаю значение myvar на моей консоли. Если вы посмотрите на выход myfunc, myvar имеет значение равно 20.

Пример2: В моем втором примере вместо использования var в моем условном блоке объявляю myvar с помощью ключевого слова let. Теперь, когда я вызываю myfunc, я получаю два разных выхода: myvar=20 и myvar=10.

Таким образом, разница очень проста в его области.

45
задан Martin R 16 June 2015 в 13:40
поделиться

3 ответа

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

class MyClass : CustomStringConvertible {
    var description: String { return "MyClass" }
}

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

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

main.swift:10:27: error: redundant conformance of 'Subclass' to protocol 'CustomStringConvertible'
class Subclass : MyClass, CustomStringConvertible {
                          ^
main.swift:10:7: note: 'Subclass' inherits conformance to protocol 'CustomStringConvertible' from superclass here
class Subclass : MyClass, CustomStringConvertible {
      ^

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

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

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

86
ответ дан Martin R 27 August 2018 в 18:02
поделиться

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

6
ответ дан Christopher Pickslay 27 August 2018 в 18:02
поделиться

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

0
ответ дан Vitya Shurapov 27 August 2018 в 18:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: