Как исправить атрибут "@IBInspectable" не имеет смысла для свойства, которое не может быть представлено в Objective-C "
В 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
}
}
}
Есть ли способ избавиться от него?
Ответы
Ответ 1
Может быть.
Точная ошибка (не предупреждение), которую я получил при выполнении копирования/вставки класса CircularIndicator: UIView
:
Свойство не может быть помечено как @IBInspectable, потому что его тип не может быть представленный в Objective-C
Я решил это, сделав это изменение:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat? { // <-- warning here
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
}
}
To:
@IBInspectable var backgroundIndicatorLineWidth: CGFloat = 0.0 {
didSet {
backgroundIndicator.lineWidth = backgroundIndicatorLineWidth!
}
}
Конечно, backgroundIndicator
undefined в моем проекте.
Но если вы кодируете didSet
, похоже, вам просто нужно определить значение по умолчанию вместо того, чтобы сделать backgroundIndicatorLineWidth
необязательным.
Ответ 2
Ниже двух пунктов может помочь вам
-
Поскольку в объекте c нет понятия опционального, поэтому дополнительная опция IBInspectable вызывает эту ошибку. Я удалил опцию и предоставил значение по умолчанию.
-
Если вы используете некоторые типы перечислений, напишите @objc перед этим перечислением, чтобы удалить эту ошибку.
Ответ 3
Свифт - 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()
}
}
}