Запись исчезла в NSDictionary, возвращающемся из JSContext

#ios #nsdictionary #nsnumber #javascriptcore

#iOS #nsdictionary #nsnumber #javascriptcore

Вопрос:

Дайте JSContext

     JSContext *context = [[JSContext alloc] init];
    context[@"directReturn"] = ^id(NSString *name) {
        id obj = @{@(2): @"test", @"testKey": @"testValue"};
        return obj;
    };
  

И вызовите его:

     JSValue *jsValue = [context evaluateScript:@"directReturn()"];
    obj = jsValue.toObject;
    NSLog(@"jscore: %@", obj);
  

Вывод таков:

 jscore: {
    testKey = testValue;
}
  

Мы можем видеть, что первая запись, которая использовала NSNumber в качестве ключа, исчезла.

Почему первая запись исчезла?

Комментарии:

1. Вероятно, это потому, что имена свойств объекта в JS должны быть строками, а не целыми числами

Ответ №1:

Основываясь на исходном коде JavaScriptCore, он позволяет преобразовывать ключи типа NSString только в объекты js.

JavaScriptCore