Хорошо, просто чтобы вернуться назад и закончить эту тему, я / наконец / выяснил, как заставить это работать без сбоев.
Для метода требуется массив с типом NSDictionary, и, по-видимому, определение типа NativeScript для NSDictionary неверно для этой проблемы и этой .
Таким образом, после нескольких дней проб и ошибок преобразование вызова Objective-C:
layer.circleRadius = [NSExpression expressionWithFormat: @"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)",
@{@12: @2, @22: @180}];
в TypeScript / NativeScript полностью нелогично:
let nsDict = new (NSDictionary as any)( [ 2, 180 ], [ 12, 22 ] );
let nsArray = NSArray.arrayWithArray( [ nsDict ] );
layer.circleRadius = NSExpression.expressionWithFormatArgumentArray(
"mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)", nsArray );
Этокомпилирует и работает.Обратите внимание, что ключи находятся в отдельном массиве, который следует за значениями, а не наоборот.
Если вы используете предложенный выше подход NSDictionary, вы получите ошибку компиляции, потому что, очевидно, типизация не поддерживает эту нотацию.
Обновление до последних модулей NativeScript и ядра позволило скомпилировать предлагаемую ссылку NSArray () [], но результирующий код вызывает исключение: а именно:
const expr = NSExpression.expressionWithFormatArgumentArray( "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)", [{12: 2, 22: 180}]);
аварийно завершает работу сисключение.
Массив, насколько я могу судить, неправильно распределен в экземпляре NSDictionary.То же самое для использования NSArray.arrayWithArray ([...]);