我应该这样做:
if (DeviceDisplay.IsSpeedAvailable == false){
DeviceDisplay.IsSpeedAvailable = true;
}
或
DeviceDisplay.IsSpeedAvailable = true;
我以为我看到flex / as3在分配之前会对布尔值进行内部检查,以确保你重新分配东西,但我找不到它来确认。
我知道这是小事,但我想知道。
答案 0 :(得分:3)
如果您使用[Bindable]
标记进行财产通知,则如果值未发生变化,则不会触发事件。如果查看生成的代码,它将检查值是否已更改。如果未更改,则不会触发事件。如果已更改,则会触发事件。
因此,在设置值之前,通过检查只会使代码复杂化(并且是冗余的)。
如果您只是设置普通布尔值(没有更改通知),那么您首先检查不会获得任何结果,因此您无需检查。
如果您正在使用某种自定义mutator,其中设置值会产生副作用,那么您应该在mutator中检查它,但绝不在它之外。像这样:
public function set foo(value):void {
if(value == _foo)
return;
_foo = value;
doSideEffect();
}
例如,这是[Bindable]
在您使用时为其写的模式(doSideEffect
触发更改事件)。
在我看来,这是唯一时间你应该在设置之前检查bool的值。
答案 1 :(得分:0)
AS在设置布尔值之前不进行内部检查,因此如果重要的是不重新给它赋值(例如避免更改侦听器被触发),那么你应该先进行检查。
如果重要的是不重新赋值,则应考虑为其设置自己的setter方法(或覆盖现有方法),在设置值之前检查该值。这样,对该变量的每个赋值都会进行检查 - 这意味着可以减少假设和错误。
这是一个测试脚本,用于说明没有进行检查 - 考虑到需要额外的处理来自动执行此操作,这是有道理的。
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private var _bool : Boolean = true;
private function set myBool ( val : Boolean ) : void {
_bool = val;
mx.controls.Alert.show('set!');
}
private function get myBool () : Boolean {
return _bool;
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="set true" click="myBool = true;"/>
<mx:Button label="set false" click="myBool = false;"/>
</mx:VBox>