У меня есть функция javascript.
function getState(){
return "Hello";
}
var cryptico = (function() {
var my = {};
my.generateRSAKey = function(passphrase, bitlength)
{
Math.seedrandom(sha256.hex(passphrase));
var rsa = new RSAKey();
rsa.generate(bitlength, "03");
return rsa;
}
}());
Если функция снаружи, я могу легко вызвать такую функцию.
NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"cryptico" ofType:@"js"];
NSString *scriptString = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil];
JSContext *context = [[JSContext alloc] init];
context = [[JSContext alloc] init];
[context evaluateScript:scriptString];
JSValue *test10 = context[@"getState"];
JSValue *test11 = [test10 callWithArguments:@[]]; //will be Hello
Но как я могу назвать что-то внутри переменной? Я пробовал много разных способов, но это не нормально.
Согласно JSValue Apple Documentation:
Блок Objective-C (Swift clousre) и функция javascript должны быть преобразованы друг в друга, используя
valueWithObject:inContext:
для преобразования в JSValue, как это было сделано в вашем коде, и
toObject
для преобразования в его фактический тип, который в этом случае является блоком. Поэтому сначала попробуйте
[test10 toObject];
и сохранить в блок, а затем вызвать блок как обычно