8.7 发布—WinterCG 兼容性第一部分
了解更多

@NativeClass() 装饰器在 NativeScript 7 中引入,提供了一种简单的方法来装饰任何旨在扩展/自定义 JavaScript ESM 世界中平台原生类的类。

关于它的使用需要注意一些事项。

仅在一个文件中使用时

如果仅在同一个文件中使用自定义原生类,可以按如下方式定义它

ts
@NativeClass()
class CustomClass extends NSObject {}

const customClassInstance = CustomClass.new()

这允许代码自然编译,并且将按预期工作。

在需要在一个文件中定义 iOS 和 Android 自定义原生类时

在这种情况下,可以使用设置方法来缓解任何交叉编译问题,例如

ts
let customClass
function setupCustomClass() {
  if (global.isAndroid) {
    @NativeClass()
    class CustomClass extends android.view.View {}
    customClass = CustomClass
  } else {
    @NativeClass()
    class CustomClass extends NSObject {}
    customClass = CustomClass
  }
}

setupCustomClass()
const customClassInstance = new customClass() // can handle different platform args with ternary if needed

global.isAndroid 条件将在为 iOS 构建应用程序时被删除,因此您的编译代码是干净且隔离的,同时允许您在一个文件中进行处理。

从文件导出并在其他地方使用时

由于 @NativeClass() 装饰器修改了 JS 语法以与 NativeScript 运行时一起工作,因此您希望确保在文件之外使用该符号时符号被正确导出。以下是如何执行此操作

ts
// custom-class.ts
@NativeClass()
class CustomClass extends NSObject {}

export { CustomClass }

// usage.ts
import { CustomClass } from './custom-class'
下一步
介绍