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(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
をオプションにするのではなく、デフォルト値を定義するだけでよいようです。
2点以下はあなたを助けるかもしれません
Objective Cにはオプションの概念がないため、オプションのIBInspectableはこのエラーを生成します。オプションを削除し、デフォルト値を提供しました。
いくつかの列挙型を使用している場合は、この列挙型の前に@objcを記述して、このエラーを削除します。
スイフト-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()
}
}
}