有许多类似我的问题,(a,b,c,d,e和f)但没人答案正确...此代码有效:
ColorBlock c = ButtonLeft.colors;
c.normalColor = LeftNormal;
c.highlightedColor = LeftPressed;
如果我想避免变量,我试试这个:
ButtonLeft.colors.normalColor = LeftNormal;
ButtonLeft.colors.highlightedColor = LeftPressed;
但它不适用于错误:
“Impossible to modify the return value of 'Selectable.Colors' because it's not a variable.
”
这是什么意思?为什么我不能这样做?接下来的问题永远不会回答:什么时候我应该知道我的代码不会工作而我需要使用变量?
答案 0 :(得分:1)
错误的根本原因是struct
是colors
,即值类型。
当您访问ButtonLeft
的{{1}}属性时,会生成struct
的副本,即ButtonLeft.colors
是ColorBlock
内ButtonLeft
的副本}}。虽然colors
属性的赋值在理论上可以成功,但它们对colors
内的ButtonLeft
没有影响,这肯定是一个编程错误。这就是语言触发错误,禁止分配的原因。
这就是为什么你需要以documentation描述的方式使用ClolrBlock
:
ColorBlock cb = ButtonLeft.colors;
cb.normalColor = newColor;
button.colors = cb;