web-dev-qa-db-fra.com

intrinsicContentSize () - La méthode ne remplace aucune méthode de sa superclasse

J'ai mis à jour vers Xcode 8 beta 5, et j'obtiens maintenant l'erreur suivante sur une classe qui hérite de UIView:

Method does not override any method from its superclass

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

Y at-il un travail autour?

23
GoldenJoe

Veuillez vérifier la dernière référence . (Vous pouvez facilement le trouver en plaçant simplement le mot "intrinsicContentSize" dans la barre de recherche de site des développeurs d'Apple .)

Déclaration

var intrinsicContentSize: CGSize { get }

intrinsicContentSize est devenu une propriété calculée, vous devez donc la remplacer de cette façon:

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

Ou simplement:

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

Lors de la transition d'une version de Xcode à une autre, il existe différentes façons de savoir pourquoi votre code ne se compile plus. Voici quelques ressources pour intrinsicContentSize:

  1. Vous pouvez rechercher intrinsicContentSize dans developer.Apple.com .
  2. Vous pouvez rechercher intrinsicContentSize directement depuis page de référence de l'API Developer Apple pour UIView .
  3. Vous pouvez ouvrir la page Diffs API iOS 10.0 pour la page UIKit et rechercher des instances de intrinsicContentSize avec le menu de recherche de votre navigateur (raccourci: cmd + F).
  4. Vous pouvez rechercher intrinsicContentSize dans la documentation et les références de l'API de Xcode (chemin: Help > Documentation and API Reference, raccourci: shift + cmd + ).
  5. Vous pouvez également cliquer avec le bouton droit sur n'importe quel UIView initialiseur de votre code Xcode (par exemple, UIView()), sélectionnez Jump to Definition puis effectuez une recherche de intrinsicContentSize.

Ces recherches vous montreront que intrinsicContentSize, avec Swift 3 et iOS 10, n'est plus une méthode mais une propriété calculée de UIView qui a la déclaration suivante :

var intrinsicContentSize: CGSize { get }


Par conséquent, vous devrez remplacer votre implémentation de la méthode intrinsicContentSize() par l'extrait de code suivant:

override public var intrinsicContentSize: CGSize {
    return ...
}
7
Imanou Petit