web-dev-qa-db-ja.com

constructorContentSize()-メソッドはスーパークラスのメソッドをオーバーライドしません

Xcode 8ベータ5に更新し、UIViewを継承するクラスで次のエラーが表示されるようになりました。

Method does not override any method from its superclass

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

回避策はありますか?

23
GoldenJoe

最新のリファレンス を確認してください。 ( Appleの開発者サイト の検索バーに「intrinsicContentSize」という単語を入力するだけで簡単に見つけることができます。)

宣言

var intrinsicContentSize: CGSize { get }

intrinsicContentSizeは計算プロパティになっているため、次の方法でオーバーライドする必要があります。

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

または単に:

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

Xcodeのあるバージョンから別のバージョンに移行する際、コードがコンパイルされなくなった理由を見つけるためのさまざまな方法があります。 intrinsicContentSizeのリソースは次のとおりです。

  1. developer.Apple.com からintrinsicContentSizeを検索できます。
  2. intrinsicContentSizeは、 IViewのApple Developer APIリファレンスページ から直接検索できます。
  3. IKitページのiOS 10.0 API差分 を開き、ブラウザのfindメニューでintrinsicContentSizeのインスタンスを検索できます(ショートカット: cmd + F)。
  4. XcodeのDocumentation and API Reference(path:からintrinsicContentSizeを検索できます。 Help > Documentation and API Reference、ショートカット: shift + cmd + )。
  5. XcodeコードのUIView初期化子(たとえば、UIView())を右クリックして、選択することもできます。 Jump to Definition intrinsicContentSizeの検索を実行します。

これらの検索により、Swift 3およびiOS 10のintrinsicContentSizeはメソッドではなく、次の宣言を持つUIViewの計算されたプロパティであることがわかります:

_var intrinsicContentSize: CGSize { get }_


結果として、intrinsicContentSize()メソッドの実装を次のコードスニペットで置き換える必要があります。

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