【问题标题】:In ActionScript 3, is conditional if/else compilation of class variables valid?在 ActionScript 3 中,类变量的条件 if/else 编译是否有效?
【发布时间】:2012-12-01 16:04:43
【问题描述】:

我正在使用 Flash Builder 4.6、AIR 3.5 中的一个 AS3 类。

任何人都可以确认以下 if/else 语法在类定义中有效。我已经对其进行了测试,它可以在 Mac 上编译和运行,但我找不到支持它的文档。

package controller
{
    import flash.desktop.NativeApplication;
    import flash.display.NativeMenu;
    import flash.display.NativeMenuItem;
    import flash.display.NativeWindow;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IEventDispatcher;

    [Bindable]
    public class AppMenu extends EventDispatcher
    {
        if (Capabilities.os.search("Mac")>-1) {
            public var titularMenu:NativeMenu;
            public var fileMenu:NativeMenu;
            public var editMenu:NativeMenu;
            private var optionsMenu:NativeMenu;
            private var addOnsMenu:NativeMenu;
            private var helpMenu:NativeMenu;
        } else {
            // Assign same variables as NativeMenuItem, for Windows.
        }

        // etcetera
    }

【问题讨论】:

  • 你可以用编译器变量来做,例如:if(CONFIG::Var){

标签: actionscript-3 apache-flex air


【解决方案1】:

不,您不能在方法或初始化程序之外使用 if/else 条件。

出于您的目的,您可以只使用在接口IAppMenu 中定义通用属性/方法,然后每个操作系统都有一个实现(当然,您仍然需要定义使用Capabilities.os 创建哪个) .

【讨论】:

  • 感谢您的回答——我怀疑是这样的。但是,接口如何提供帮助,因为您无法在接口中定义变量。
  • 您将实现一个接口(公共类 AppMenu 实现 IAppMenu)。然后,您必须拥有接口中定义的所有功能。它将在您必须“平台嗅探”的那些函数的主体中(if (Capabilities.os.search("iOS") > -1)...
  • @user1834364 您确实可以在接口中定义 getter/setter (function get property():String)。但是,在您的情况下,我会尝试以另一种方式定义合同(因为在一种情况下,您需要拥有NativeMenu 和另一种NativeMenuItem)。这里的关键是按合同设计——IAppMenu 的实现究竟需要什么?当用户与菜单项交互时,可能只是接收到初始化数据并调度一些事件。
  • 通过操作系统的一种实现,我的意思是拥有WindowsAppMenu implements IAppMenuMacOSAppMenu implements IAppMenu
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2016-12-04
  • 1970-01-01
  • 2020-09-18
  • 2022-07-08
  • 1970-01-01
相关资源
最近更新 更多