在本机脚本(带打字稿)项目中使用 obj-c class 时的编组设置

Marshalling setup when using obj-c class in nativescript (with typescript) project

按照 https://nativescript.org/blog/adding-objective-c-code-to-a-nativescript-app/ 上的说明,我设置了一个非常简单的 nativescript 项目(下面有打字稿):

  1. tns 创建 simpleApp --tsc
  2. tns平台添加ios
  3. tns 准备 ios
  4. 运行 通过 xcode.
  5. 生成的 ios 项目

应用 运行正确。

接下来我向项目中添加了一个自定义 obj-c class(App_Resources/iOS/src/Stuff .h 和 .m):

#import <Foundation/Foundation.h>

@interface Stuff: NSObject
+(void)doStuff;
@end
#import "Stuff.h"

@implementation Stuff
+(void)doStuff {
    NSLog(@"I should see this...");
}
@end

还有一个module.modulemap:

module Stuff {
    header "Stuff.h"
    export *
}

tns prapare ios 命令成功处理了 class。

当我尝试将 'Stuff' 对象添加到打字稿源时,我得到一个 cannot find name Stuff。 如何让 typescript 和 obj-c 之间的 marshalling/metadata 正常工作?我需要 运行 一些脚本吗?添加进口?本教程没有提及任何有关...

这是我添加到 nativescript 默认模板应用程序中的内容:

onTap() {
        this._counter--;
        this.updateMessage();
        Stuff.doStuff();
    }

并希望在点击按钮时看到日志文本...

我找到了一种方法来将所需的 .d.ts 文件添加到项目中: generating-typescript-typings

运行 在您的 nativescript 项目的 src-root 中添加以下内容:

TNS_TYPESCRIPT_DECLARATIONS_PATH="$(pwd)/typings" tns build ios

它生成一个 typings 文件夹,其中包含 ios class 的所有 .d.ts 文件,包括手动创建的 Stuff class。现在可以正确解释 Typescript 代码...新的 obj-c classes 一旦被上面的行处理,就可以在 TS 代码中寻址。