web-dev-qa-db-ja.com

「 '@IBInspectable'属性は、Objective-Cで表現できないプロパティでは無意味です」という警告を修正する方法

Xcode 9およびSwift 4では、いくつかのIBInspectableプロパティに対して常にこの警告が表示されます。

    @IBDesignable public class CircularIndicator: UIView {
        // this has a warning
        @IBInspectable var backgroundIndicatorLineWidth: CGFloat? {  // <-- warning here
            didSet {
                backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
            }
        }

    // this doesn't have a warning
    @IBInspectable var topIndicatorFillColor: UIColor? {
        didSet {
            topIndicator.fillColor = topIndicatorFillColor?.cgColor
        }
    }
}

それを取り除く方法はありますか?

16
Adrian

多分。

正確なerror(not warning)クラスCircularIndicator: UIViewのコピー/貼り付けを行ったときに得たものは次のとおりです。

プロパティは、Objective-Cでタイプを表すことができないため、@ IBInspectableとしてマークできません

この変更を行って解決しました。

@IBInspectable var backgroundIndicatorLineWidth: CGFloat? {  // <-- warning here
    didSet {
        backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
    }
}

に:

@IBInspectable var backgroundIndicatorLineWidth: CGFloat = 0.0 {
    didSet {
        backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
    }
}

もちろん、backgroundIndicatorは私のプロジェクトでは未定義です。

ただし、didSetに対してコーディングしている場合は、backgroundIndicatorLineWidthをオプションにするのではなく、デフォルト値を定義するだけでよいようです。

26
dfd

2点以下はあなたを助けるかもしれません

  1. Objective Cにはオプションの概念がないため、オプションのIBInspectableはこのエラーを生成します。オプションを削除し、デフォルト値を提供しました。

  2. いくつかの列挙型を使用している場合は、この列挙型の前に@objcを記述して、このエラーを削除します。

7

スイフト-5

//Change this with below
@IBInspectable public var shadowPathRect: CGRect!{
    didSet {
        if shadowPathRect != oldValue {
            setNeedsDisplay()
        }
    }
}

@IBInspectable public var shadowPathRect: CGRect = CGRect(x:0, y:0, width:0, height:0) {
    didSet {
        if shadowPathRect != oldValue {
            setNeedsDisplay()
        }
    }
}
3
Shakeel Ahmed