获取 class 名称列表 objc_getClassList in JavaScript for Automation
Obtaining a list of class names with objc_getClassList in JavaScript for Automation
通过在JXA中使用ObjC.bindFunction
,我们可以从objc_getClassList
.
中获得一个整数结果
是否有人充分了解类型和桥接问题,以找到将 objc_getClassList
返回的 class 名称字符串列表获取到 Automation JSContext 的 JavaScript 中的途径?
(returns下面的代码只有一个[Object Ref]
字符串)
(() => {
'use strict';
ObjC.import('stdlib');
ObjC.bindFunction('CFMakeCollectable', [ 'id', [ 'void *' ] ]);
ObjC.bindFunction('objc_getClassList', ['int', ['void *', 'int']]);
var classes = Ref();
const intClasses = $.objc_getClassList(null, 0);
$.objc_getClassList(classes, intClasses);
$.CFMakeCollectable(classes);
return [intClasses, classes];
//-> [11411, [object Ref]]
})();
objc_getClassList
函数期望我们为其提供一个内存缓冲区,以便将 class 列表复制到其中。通常,JXA 会将 malloc 的 return 类型视为无符号字符的 C 数组,但使用 bindFunction
我们可以将 malloc 的 return 类型转换为 C 指针数组,并使 objc_getClassList
的第一个参数匹配该类型。然后,只需索引缓冲区(Ref 类型)并将该值传递给 class_getName
.
ObjC.bindFunction('objc_getClassList', ['int', ['void**', 'int']])
ObjC.bindFunction('malloc', ['void**', ['int']])
ObjC.bindFunction('class_getName', ['char *', ['void*']])
const numClasses = $.objc_getClassList(undefined, 0)
const classes = $.malloc(8*numClasses)
$.objc_getClassList(classes, numClasses)
for (i=0; i<numClasses; i++) {
console.log("classes[" + i + "]: " + $.class_getName(classes[i]))
}
通过在JXA中使用ObjC.bindFunction
,我们可以从objc_getClassList
.
是否有人充分了解类型和桥接问题,以找到将 objc_getClassList
返回的 class 名称字符串列表获取到 Automation JSContext 的 JavaScript 中的途径?
(returns下面的代码只有一个[Object Ref]
字符串)
(() => {
'use strict';
ObjC.import('stdlib');
ObjC.bindFunction('CFMakeCollectable', [ 'id', [ 'void *' ] ]);
ObjC.bindFunction('objc_getClassList', ['int', ['void *', 'int']]);
var classes = Ref();
const intClasses = $.objc_getClassList(null, 0);
$.objc_getClassList(classes, intClasses);
$.CFMakeCollectable(classes);
return [intClasses, classes];
//-> [11411, [object Ref]]
})();
objc_getClassList
函数期望我们为其提供一个内存缓冲区,以便将 class 列表复制到其中。通常,JXA 会将 malloc 的 return 类型视为无符号字符的 C 数组,但使用 bindFunction
我们可以将 malloc 的 return 类型转换为 C 指针数组,并使 objc_getClassList
的第一个参数匹配该类型。然后,只需索引缓冲区(Ref 类型)并将该值传递给 class_getName
.
ObjC.bindFunction('objc_getClassList', ['int', ['void**', 'int']])
ObjC.bindFunction('malloc', ['void**', ['int']])
ObjC.bindFunction('class_getName', ['char *', ['void*']])
const numClasses = $.objc_getClassList(undefined, 0)
const classes = $.malloc(8*numClasses)
$.objc_getClassList(classes, numClasses)
for (i=0; i<numClasses; i++) {
console.log("classes[" + i + "]: " + $.class_getName(classes[i]))
}