我从Flash Builder 4.7,AIR SDK 15,16和17,Flex SDK 4.6中的FlexLib项目和AS3 Lib项目之间的不一致性中得到了一些问题。
这些常见的事情是FlexLib不允许(突出显示语法错误)来构建/编译常规AS3Lib项目中允许的代码片段。
请注意,下面的例子是简化的,即使它违反了良好做法,也有现实生活中的用例。
internal class Before
{
public function Before(){}
}
package
{
public class Main
{
public function Main()
{
}
}
}
在Flex Library Project中,此代码会导致:
1083:语法错误:包是意外的。
在常规的ActionScript库项目中,它可以正常工作,没有任何警告。
var array:Array = [Boolean, Number, XML];
for(var c:Class in array)
{
if(c is Object) { trace('test') }
}
在Flex Library Project中,此代码会导致:
1067:将String类型的值隐式强制转换为不相关的类型 类。
在常规的ActionScript库项目中,它可以正常工作,没有任何警告。
public static const FileClass:Class = String;
public function main():void
{
if('test' is Vector.<FileClass>)
{
trace('what?');
}
}
在Flex Library Project中,此代码会导致:
1120:访问未定义的属性FileClass。
在常规的ActionScript库项目中,它可以正常工作,没有一个警告。
如果有人能说出为什么会发生这种情况,或者能给我一个寻找解决方案的线索,我将非常感激。
答案 0 :(得分:3)
根据this,涉及两种不同的编译器:
使用旧版编译器 对于ActionScript项目,Flash Builder默认使用ActionScript编译器(ASC)。如果您使用的是Adobe Flex SDK 4.6或早期版本的Flex SDK,请选择“使用旧版编译器”以使用较旧的编译器。
我想这解释了差异。
以下是尝试解决此问题。
我对图书馆项目不太了解。 从我在资源中找到的(上面的链接),这些项目产生.swc文件。 我也不太喜欢弯曲。 Flex是“只是”用actionscript编写的框架。
您的库是动作脚本库还是flex库,实际上并不是用户的选择,而是您的代码所做的事情。
如果您的库包含一些flex组件,我会说它是一个flex库项目。 但如果它是普通的旧动作脚本,它就是一个动作脚本库。
假设您的库是一个动作脚本库。 您将库编译为.swc文件并完成它。
您的是执行该编译步骤的人,而不是您图书馆的用户。如果他们能够执行这个编译,我认为他们不关心。 实际上他们关心的是他们的项目是否包含你的库(.swc文件)。我想这就是这种情况,因为.swc将被使用,而不是编译。
毕竟,如果它是一个动作脚本库,则别无选择,因为每个flex项目都是一个动作脚本项目。 (但每个actionscript项目都是一个flex项目)
构建你的库项目(无论编译器是什么工作),看看你是否可以在actionscript和flex项目中使用生成的.swc文件。