Search code examples
swiftxcodeswift4xcode9-beta

How to fix "'@IBInspectable' attribute is meaningless on a property that cannot be represented in Objective-C" warning


In Xcode 9 and Swift 4 I always get this warning for some IBInspectable properties:

    @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
        }
    }
}

Is there a way to get rid of it ?


Solution

  • Maybe.

    The exact error (not warning) I got when doing a copy/paste of class CircularIndicator: UIView is:

    Property cannot be marked @IBInspectable because its type cannot be represented in Objective-C

    I resolved it by making this change:

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

    To:

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

    Of course, backgroundIndicator is undefined in my project.

    But if you are coding against didSet, it looks like you just need to define a default value instead of making backgroundIndicatorLineWidth optional.