为什么IBInspectable没有为storyboard中的可选变量设置vaue?

问题描述:

我正在演示如何了解@IBInspectable的工作原理。为什么IBInspectable没有为storyboard中的可选变量设置vaue?

首先,我取得了UIViewController子类两个变量:

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

所以它出现在故事​​板。在那之后,我改变这些变量的值在故事板:

enter image description here

然后,我尝试打印在“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值:90

标志值:真

它正常工作,当我改变的变量声明相似,只是,

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

在那之后,我改变了与上述相同的故事板的价值,但价值不会改变。

输出是:

intTest值:可选(10)

标志值:可选(假),所以我的问题是,为什么值不更新

当我声明变量是可选的?

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

您可以将其声明为可选项,并且效果良好。 只需调整你的代码如下:

@IBInspectable var intTest: Int? { 
     didSet { 
      self.intTestTweak = intTest 
     } 
    } 

willSetdidSet解释here

设置可选值IBInspectable VAR

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

设置默认值IBInspectable VAR

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

使用这种方法每次你改变接口Builder`价值的时候,你的观点将被更新。

@IBInspectable var cornerRadius: CGFloat { 
    get { 
     return layer.cornerRadius 
    } 
    set { 
     layer.cornerRadius = newValue 
    } 
} 
+0

我知道,当我们声明一个变量为可选的,那么值不会更新,但我的问题是为什么? –

+0

'@IBInspectable var placeHolderImage:UIImage?'我更改IBInspectable var选项它的工作良好。用你的设计课程更新你的问题。 –

+0

是的,我发现图像更新与String.But相同,我的问题是为什么Int和Bool值不更新? –