如何修复“'@IBInspectable' 属性在无法在 Objective-C 中表示的 属性 上无意义”警告
How to fix "'@IBInspectable' attribute is meaningless on a property that cannot be represented in Objective-C" warning
在 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
}
}
}
有没有办法摆脱它?
也许吧。
确切的 错误(不是 警告)我在执行 class 的 copy/paste CircularIndicator: UIView
是:
Property cannot be marked @IBInspectable because its type cannot be
represented in Objective-C
我通过以下更改解决了这个问题:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat? { // <-- warning here
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
}
}
收件人:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat = 0.0 {
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth
}
}
当然,backgroundIndicator
在我的项目中是未定义的
但是如果您针对 didSet
进行编码,看起来您只需要定义一个默认值而不是使 backgroundIndicatorLineWidth
可选。
以下两点可能对您有所帮助
由于objective c中没有optional的概念,所以optional IBInspectable会产生这个错误。我删除了可选值并提供了默认值。
如果您正在使用某些枚举类型,请在该枚举之前写上@objc 以消除此错误。
Swift - 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()
}
}
}
在 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
}
}
}
有没有办法摆脱它?
也许吧。
确切的 错误(不是 警告)我在执行 class 的 copy/paste CircularIndicator: UIView
是:
Property cannot be marked @IBInspectable because its type cannot be represented in Objective-C
我通过以下更改解决了这个问题:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat? { // <-- warning here
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
}
}
收件人:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat = 0.0 {
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth
}
}
当然,backgroundIndicator
在我的项目中是未定义的
但是如果您针对 didSet
进行编码,看起来您只需要定义一个默认值而不是使 backgroundIndicatorLineWidth
可选。
以下两点可能对您有所帮助
由于objective c中没有optional的概念,所以optional IBInspectable会产生这个错误。我删除了可选值并提供了默认值。
如果您正在使用某些枚举类型,请在该枚举之前写上@objc 以消除此错误。
Swift - 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()
}
}
}