在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
可选。
低于两个点可能会帮助您
-
由于目标C中没有可选的概念,因此可选的可选镜会产生此错误。我删除了可选的并提供了默认值。
-
如果您使用的是一些枚举类型,请在枚举之前写@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()
}
}
}