NativeScript导入iOS框架类并向下转换

时间:2019-03-29 01:23:29

标签: nativescript

我在Cocoapod中有一个自定义的Swift框架,包装在NativeScript插件中。我的NativeScript TypeScript代码可以执行访问框架中类中的类和方法所需的一切。找出所有细微差别,这本身就是很多工作。现在我到了最后一部分,它是从UIViewController开始在框架中向下转换自定义viewController的步骤。以下代码有效,因为NativeScript实际上加载了我的故事板和控制器:

var podBundle = NSBundle.bundleForClass(CustomViewController)

var bundleUrl = podBundle.URLForResourceWithExtension("MyFramework", "bundle")

var bundle = NSBundle.bundleWithURL(bundleUrl)

var storyboard = UIStoryboard.storyboardWithNameBundle("Main", bundle)

var viewController = storyboard.instantiateViewControllerWithIdentifier("CustomViewControllerID")

console.log(viewController)
console.log(viewController instanceof CustomViewController)

application.ios.rootController.presentViewControllerAnimatedCompletion(viewController, true, null)

第一个console.log实际上记录了完整的类,如MyFramework.CustomViewController:hexcodehere

第二个console.log也记录为true,这意味着它知道viewController变量的类型确实为CustomViewController

问题是,我需要在CustomViewController中调用一个函数,所以我需要向下转换:

storyboard.instantiateViewControllerWithIdentifier("CustomViewControllerID") as CustomViewController

但是编译器对CustomViewController说“找不到名称”。如果我尝试MyFramework.CustomViewController,它会在MyFramework中显示“找不到名称”。注意NSBundle.bundleForClass(CustomViewController)起作用。因此,这意味着CustomViewController对编译器是已知的。

如果我在文件顶部导入插件:

import { CustomViewController } from "myplugin",它对myplugin说“找不到模块”。请注意,我实际上可以访问此插件中的所有类。因此,该插件肯定已正确安装。它是从本地文件路径而不是git安装的。

似乎我缺少了非常简单的东西。但是我无法终生解决。

我很乐意帮助其他想要使用本机iOS故事板和Swift类等的人。

1 个答案:

答案 0 :(得分:0)

证明大脑在后台处理问题的能力突然出现了。由于运行时知道类型,所以我要做的就是将其强制转换为“ any”以解决编译器问题:

var viewController = storyboard.instantiateViewControllerWithIdentifier(“ CustomViewControllerID”)为任何

然后,编译器允许我在没有投诉的情况下调用CustomViewController viewcontroller实例上的任何函数,并且运行时也很好。为了更加安全,请将对子类方法的调用包装在if instanceof块中。