如何修复"'@IBInspectable' attribute is meaningless on a property that cannot be represented in Objecti



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

有没有办法摆脱它?

也许。

error (不是警告)我在执行CircularIndicator: UIView类复制/粘贴时得到的是:

属性无法标记@ibinspect,因为它的类型不能为在Objective-C

中表示

我通过进行此更改来解决它:

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

to:

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

当然,backgroundIndicator在我的项目中不确定。

但是,如果您要针对didSet进行编码,则看起来您只需要定义默认值而不是使backgroundIndicatorLineWidth可选。

低于两个点可能会帮助您

  1. 由于目标C中没有可选的概念,因此可选的可选镜会产生此错误。我删除了可选的并提供了默认值。

  2. 如果您使用的是一些枚举类型,请在枚举之前写@OBJC以删除此错误。

swift -5

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

to

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

相关内容

  • 没有找到相关文章

最新更新