gpt4 book ai didi

ios - 如何使用 JavascriptCore 将类分配给变量

转载 作者:行者123 更新时间:2023-11-29 02:16:42 25 4
gpt4 key购买 nike

我正在尝试为 iOS 使用 JavascriptCore 框架,但我遇到了问题。

我的简单 javascript 文本:

NSString * jsCode = @"var log = require('log'); log.test();";

我的 Obj-c 代码:

JSContext * context = [[JSContext alloc] initWithVirtualMachine:[[JSVirtualMachine alloc] init]];

context[@"require"] = ^(NSString* sting) {
NSLog(@"require ok");
return [JsLogFacade class];
};

[context evaluateScript:jsCode];

我想做的就是将我的 JsLog 类分配给我的 javascript 中的 log 变量,这样我就可以在之后评估 log.test()

JsLogFacade.h

#import <Foundation/Foundation.h>
#import <JavaScriptCore/JSExport.h>

@protocol LogJsExports<JSExport>
+ (void) test;
@end

@interface JsLogFacade : NSObject <LogJsExports>
@end

JsLogFacade.m

#import "JsLogFacade.h"

@implementation JsLogFacade
+ (void) test {
NSLog(@"It's working");
}
@end

我没有错误,但我没有看到我的 NSLog。请注意,如果我删除 block 内的 return 语句,“require ok”会起作用。

PS:我不能只执行下面的代码,因为我不知道我的脚本最后的代码是什么

context[@"log"]=[JsLogFacade class];

您是否知道为什么我正在尝试做的事情是可能的?

最佳答案

您不应该将上下文条目分配为记录器的实例吗?如:

context[@"log"]=[[JsLogFacade alloc] init];

或者在你的需求代码中返回一个实例而不是一个类?

功能测试不应该是实例方法而不是类方法吗?

@implementation JsLogFacade
- (void) test
{
NSLog(@"It's working");
}
@end

关于ios - 如何使用 JavascriptCore 将类分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673274/

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