为什么IBInspectable没有为storyboard中的可选变量设置vaue?
问题描述:
我正在演示如何了解@IBInspectable的工作原理。为什么IBInspectable没有为storyboard中的可选变量设置vaue?
首先,我取得了UIViewController子类两个变量:
@IBInspectable var intTest:Int = 10
@IBInspectable var flag:Bool = false
所以它出现在故事板。在那之后,我改变这些变量的值在故事板:
然后,我尝试打印在“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
}
}
willSet
和didSet
解释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
}
}
我知道,当我们声明一个变量为可选的,那么值不会更新,但我的问题是为什么? –
'@IBInspectable var placeHolderImage:UIImage?'我更改IBInspectable var选项它的工作良好。用你的设计课程更新你的问题。 –
是的,我发现图像更新与String.But相同,我的问题是为什么Int和Bool值不更新? –