Ответ 1
Вы не можете определить примитивы как nullable для @IBInspectable
s.
При попытке сделать это и установите значение для одного из этих свойств, вы получите следующее предупреждение в IBDesignable time:
@IBDesignable class TestDesignable IB Designables: Игнорирование пользовательского атрибута времени выполнения для ключевого пути "testInt" на примере "TestDesignable". Удалите исключение при попытке установить его значение: [setValue: forUndefinedKey:]: этот класс не подходит для кодирования ключа для ключа testInt.
И во время выполнения вы получите следующую ошибку:
Не удалось установить (testInt) определяемое пользователем свойство проверки (TestDesignable): [setValue: forUndefinedKey:]: этот класс не является ключевым для кодирования ключа для ключа testInt.
Чтобы исправить это, измените его с необязательного на необязательное и дайте ему нулевое значение по умолчанию.
Invalid:
@IBDesignable class TestDesignable: UIView {
@IBInspectable var testInt: Int? = nil // crash
@IBInspectable var testFloat: CGFloat? = nil // crash
@IBInspectable var testPoint: CGPoint? = nil // crash
@IBInspectable var testColor: UIColor? = nil
}
Действительно:
@IBDesignable class TestDesignable: UIView {
@IBInspectable var testInt: Int = 0
@IBInspectable var testFloat: CGFloat = 0
@IBInspectable var testPoint: CGPoint = .zero
@IBInspectable var testColor: UIColor? = nil
}