ios – 为什么IBInspectable没有为故事板中的可选变量设置vaue?

我正在制作一个学习@IBInspectable如何工作的演示.

首先,我在UIViewController子类中创建了两个变量:

  @IBInspectable var intTest:Int = 10
  @IBInspectable var flag:Bool = false

这样它就出现在故事​​板中.之后,我在故事板中更改这些变量的值:

《ios – 为什么IBInspectable没有为故事板中的可选变量设置vaue?》

然后,我尝试在“viewDidLoad()”方法中打印这些变量,如下所示:

  override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
       print("intTest value: \(String(describing: intTest))")
       print("flag value: \(String(describing: flag)))")
  }

输出是:

intTest value: 90

flag value: true

它工作正常,除非我更改变量声明,如,

  @IBInspectable var intTest:Int? = 10
  @IBInspectable var flag:Bool? = false

之后,我在故事板中更改了与上面相同的值,但是值没有更改.

输出是:

intTest value: Optional(10)

flag value: Optional(false)

所以我的问题是,当我将变量声明为可选时,为什么值不会更新?

另一件事是,当我将变量作为字符串时,值会更新.任何人都可以帮我理解这个功能吗?

最佳答案 设置可选值IBInspectable var

@IBInspectable var placeHolderImage:UIImage? {
     didSet {
         leftViewSetting()
     }
 }

设置默认值IBInspectable var

@IBInspectable var placeHolderImage:UIImage = UIImage() {
    didSet {
        leftViewSetting()
    }
}

使用此方法,每次更改Interface Builder中的值时,您的视图都将更新.

@IBInspectable var cornerRadius: CGFloat {
    get {
       return layer.cornerRadius
    }
    set {
       layer.cornerRadius = newValue
    }
}
点赞