Подтвердить что ты не робот

IntrinsicContentSize() - метод не отменяет какой-либо метод из его суперкласса

Я обновился до Xcode 8 beta 5 и теперь получаю следующую ошибку в классе, который наследуется от UIView:

Method does not override any method from its superclass

override public func intrinsicContentSize() -> CGSize
{
   ...
}

Есть ли способ обхода?

4b9b3361

Ответ 1

Пожалуйста, проверьте последнюю ссылку. (Вы можете легко найти его, просто поместив слово "intrinsicContentSize" в строку поиска сайт разработчика Apple.)

Заявление

var intrinsicContentSize: CGSize { get }

intrinsicContentSize стал вычисленным свойством, поэтому вам необходимо переопределить его следующим образом:

override open var intrinsicContentSize: CGSize {
    get {
        //...
        return someCGSize
    }
}

Или просто:

override open var intrinsicContentSize: CGSize {
    //...
    return someCGSize
}

Ответ 2

При переходе от одной версии Xcode к другой существуют разные способы выяснить, почему ваш код больше не компилируется. Вот несколько ресурсов для intrinsicContentSize:

  • Вы можете искать intrinsicContentSize из developer.apple.com.
  • Вы можете найти intrinsicContentSize прямо из справочную страницу API разработчика Apple для UIView.
  • Вы можете открыть iOS 10.0 API Diffs для страницы UIKit и найти экземпляры intrinsicContentSize в меню поиска браузера (ярлык: cmd + F).
  • Вы можете искать intrinsicContentSize из документации Xcode и ссылки на API (путь: Help > Documentation and API Reference, ярлык: shift + cmd + 0).
  • Вы также можете щелкнуть правой кнопкой мыши по любому инициализатору UIView в коде Xcode (например, UIView()), выберите Jump to Definition, а затем выполните поиск intrinsicContentSize.

Эти поисковые запросы покажут вам, что intrinsicContentSize, с Swift 3 и iOS 10, больше не является методом, а вычисленным свойством UIView, который имеет следующее объявление:

var intrinsicContentSize: CGSize { get }


Как следствие, вам придется заменить реализацию метода intrinsicContentSize() на следующий фрагмент кода:

override public var intrinsicContentSize: CGSize {
    return ...
}