gpt4 book ai didi

flash - 将强类型对象传递给需要接口(interface)的方法

转载 作者:行者123 更新时间:2023-12-02 00:30:56 26 4
gpt4 key购买 nike

我在将强类型对象 AttractView 传递给另一个需要 IWizardView 接口(interface)的方法 addView() 时遇到困难AttractView 确实实现了。

当我按原样传递它时(如下所示),我得到编译错误 CaptureApplication.as,第 120 1067 行:将 AttractView 类型的值隐式强制转换为不相关的 IWizardView 类型。

在传递之前转换为 IWizardViewBaseView 会在运行时产生类似的错误。

应用类:

public class CaptureApplication extends MovieClip
{
public var attractView : AttractView;
public var captureView : CaptureView;
public var reviewView : ReviewView;
public var completeView : CompleteView;
protected var wizard : Wizard;

public function CaptureApplication()
{
// Create views
attractView = new AttractView();
captureView = new CaptureView();
reviewView = new ReviewView();
completeView = new CompleteView();

// Create wizard and add views to sequence
wizard = new Wizard( this );
wizard.addView( attractView );
wizard.addView( captureView );
wizard.addView( reviewView );
wizard.addView( completeView );
}

// ...
}

向导:

public class Wizard extends EventDispatcher
{
// ...

public function addView ( pView : IWizardView ) : void
{
// ...
}

//...
}

还有一个示例 View :

public class AttractView extends BaseView implements IWizardView
{
// ...
}

我希望的架构(为清楚起见进行了简化):

CAPTURE LIBRARY (AS3 SWC)
/ classes
/ wizard
/ IWizardView
/ Wizard
/ capture
/ IView
/ BaseView
/ AttractView
/ CaptureView
/ (etc.)

CAPTURE APPLICATION (Flash)
/ classes
/ CaptureApplication

这里的想法是,我正在构建多个具有相似 UI 的“捕获”应用程序,因此我想将通用元素提取到一个库中,并根据需要为每个独特的捕获应​​用程序进行扩展。

更新 1:

IWizardViewWizard 实际上位于一个单独的库 SWC 中,该库包含在 CaptureApplication 项目中。还值得注意的是,FLA FB 项目都包含 SWC。也许有冲突?一旦我将所有类从库移动到项目并从项目和 FLA 中删除 SWC,它就起作用了。

我明天会有更多时间玩和调查。后续更新。

更新 2:

我发现了我的架构有问题的地方。我可以将我的界面和 BaseView 类保留在我的库 SWC 中。当我尝试将我的 View (AttractView 等)从我的应用程序项目移动到库 SWC 时,问题就出现了。我的libs文件夹合并到代码中,不是实时共享的。有什么想法吗?

最佳答案

我知道这可能不起作用的唯一方法是当您将应用程序的某些部分加载到不同的应用程序域中,或者如果您使用的应用程序域驻留在不同的安全域中(在这种情况下,应用程序域将不同,无论不管你做什么)。

Wizard 中包含 IWizardView 的应用程序域与 AttractView 所在的应用程序域不同时,就会发生这种情况。这仅在加载应用程序部分时发生(也可能在使用 [Embed] 嵌入时发生——不太确定。)

如果是这种情况,您甚至可能拥有完全相同的合格类名和接口(interface)名,但仍然会遇到强制转换错误。注意:在 Flash Builder 中,您可以看到可以比较的声明的内存地址(特别是在异常消息中)。

引用文档的这些部分:

如果情况并非如此,并且您没有在任何地方加载任何内容,请详细说明您的问题。我真的很好奇问题是什么。

编辑关于在 SWC 中用作 RSL 的代码的应用领域的文章。

关于flash - 将强类型对象传递给需要接口(interface)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6835645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com