我有一组不同的MovieClip:
Pink
Yellow
Red
我创建了一个项目
item = new Pink();
item = new Red();
等...
如何编写一个开关盒以查看我有哪个MovieClip?
switch (item) {
case Pink:
// do something
break;
case Red:
// do something
break;
}
我只知道如何为字符串编写开关案例......
答案 0 :(得分:5)
您可以将类名称作为字符串获取并按照通常使用此方法的方式进行切换...
switch (getQualifiedClassName(item)) {
case "Pink":
// do something
break;
case "Red":
// do something
break;
}
答案 1 :(得分:5)
简单回答:不要。
Pink
和Red
都是Color
s,因此make Color
具有以下功能:
interface IColor
{
public function doSomething():void;
}
并让Pink
和Red
扩展功能:
class Pink extends MovieClip implements IColor
{
...
public override function doSomething():void
{
//different code
}
}
class Red extends MovieClip implements IColor
{
...
public override function doSomething():void
{
//more different code
}
}
然后在你的代码中你可以打电话:
item.doSomething();
对任何一种情况都会做正确的事情。
答案 2 :(得分:3)
这个问题已经有了答案,但对于任何有兴趣的人,你也可以这样做:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var cat:Cat = new Cat();
switch(Class(Object(cat).constructor))
{
case Cat : trace("instance of " + Cat); break;
case Dog : trace("instance of " + Dog); break;
}// end switch
// output:
}// end function
}// end class
}// end package
internal class Cat
{
public function Cat() { }
}// end class
internal class Dog
{
public function Dog() { }
}// end class
答案 3 :(得分:2)
使用“是”关键字:
if (item is Pink) // do something
在case语句中使用“is”将如下所示:
switch(true)
{
case item is Pink :
// do something
break;
case item is Red :
// do something
break;
}
关于“is”语句的强大功能是适用于继承类型。所以,例如,如果我想检查MovieClip,Sprite或SimpleButton,我可以写:
if (item is DisplayObject) // do something
因为所有这些类型都继承自DisplayObject。
另一个好处是没有不必要的内省(例如使用getQualifiedClassName)。因此,“is”关键字具有更好的性能,不需要额外的代码。