在AS3中,我可以按如下方式访问嵌套数组/对象:
var platformObj:Object = {"filters": {"manufacturer": ["Adobe Windows"]};
trace(platformObj["filters"]["manufacturer"]); //trace output: "Adobe Windows";
Haxe中的错误:String应该是Int(对于第二个参数):
platformObj [ “过滤器”]的 [ “制造商”]
如何在Haxe / OpenFL中执行此操作?
答案 0 :(得分:2)
openfl.utils.Object
基本上只是Dynamic
的typedef
,因此以下工作正常:
trace(platformObj.filters.manufacturer); // [trace] Main.hx:6: [Adobe Windows]
如果您需要使用String
来访问这些字段,您可以使用type check执行以下操作:
trace((platformObj["filters"] : Object)["manufacturer"]);
在幕后,所有这些只是reflection:
trace(Reflect.field(Reflect.field(platformObj, "filters"), "manufacturer"));
答案 1 :(得分:2)
你可以使用点符号:
var platformObj = {filters: {manufacturer: ["Adobe Windows"]}};
// the type of platformObj is `{filters:{manufacturer:Array<String>}}` in this case
trace(platformObj.filters.manufacturer);
或者您可以使用StringMap:
var platformObj = ["filters" => ["manufacturer" => ["Adobe Windows"]]];
// the type of platformObj is `Map<String, Map<String, Array<String>>>` in this case
trace(platformObj["filters"]["manufacturer"]);
Haxe没有Object
,但有Dynamic。您可以使用Reflect检索其字段:
var platformObj:Dynamic = {filters: {manufacturer: ["Adobe Windows"]}};
var filters = Reflect.field(platformObj, "filters");
var manufacturer = Reflect.field(filters , "manufacturer");
trace(manufacturer);
当您使用Haxe 3.3+时,您可以使用Any
代替Dynamic
。
前两个使用起来更安全。使用动态/反射的最后一个可能有副作用。