如何从NativeScript调用Objective-C NSExpression(格式:...)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (65)

我正在努力扩展NativeScript-Mapbox插件,以包含渲染虚线的功能。我正在这个页面上示例

在iOS上,我遇到了尝试将此NSExpression调用转换为NativeScript的问题:

layer.circleRadius = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)",
[12: 2,
22: 180])

在我看来,在tns-platform-declarations中列出了这个调用的NativeScript模拟.objc!Foundation.d.ts NSExpression定义是:

static expressionWithFormatArgumentArray(expressionFormat: string, _arguments: NSArray<any>): NSExpression;

这是正确的方法吗?

如果是这样,我如何将[12:2,22:180]转换为NSArray类型?

缺乏文档,我尝试创建一个数组数组并将其传递给:

new NSArray( {objects: myArray} );

但是它因为一个段错误而崩溃了。

显然,我错过了一些东西。

提问于
用户回答回答于

您正在处理的swift(非Objective-c)对象不是数组,而是字典。

import Swift
print(type(of: [12: 2, 22: 180]))
// Dictionary<Int, Int>

它期望的数组是您想要的所有格式替换参数的数组; 在这种情况下,该数组是长度的1,只包含字典。您可以将其转换为NativeScript JavaScript / TypeScript:

const expr = NSExpression.expressionWithFormatArgumentArray(
  "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'exponential', 1.75, %@)",
  [{12: 2, 22: 180}]);

扫码关注云+社区

领取腾讯云代金券