我在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类等的人。
答案 0 :(得分:0)
证明大脑在后台处理问题的能力突然出现了。由于运行时知道类型,所以我要做的就是将其强制转换为“ any”以解决编译器问题:
var viewController = storyboard.instantiateViewControllerWithIdentifier(“ CustomViewControllerID”)为任何
然后,编译器允许我在没有投诉的情况下调用CustomViewController viewcontroller实例上的任何函数,并且运行时也很好。为了更加安全,请将对子类方法的调用包装在if instanceof块中。