NativeScript импортирует классы платформы iOS и снижает - PullRequest
1 голос
/ 29 марта 2019

У меня есть пользовательский фреймворк Swift в Cocoapod, завернутый в плагин NativeScript.Мой код NativeScript TypeScript может делать все, что ему нужно для доступа к классам и методам в классах в рамках.Это само по себе было много работы, чтобы выяснить все нюансы.Теперь я в последней части, которая состоит в том, чтобы уменьшить пользовательский viewController в фреймворке с UIViewController.Следующий код работает, так как 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.

Кажется, мне не хватает чего-то чертовски простого.Но я не могу понять это ради своей жизни.

Я рад помочь другим, кто хочет использовать раскадровку и классы Swift и классы Swift и т. Д.

1 Ответ

0 голосов
/ 30 марта 2019

Подтверждение способности мозга работать над проблемой на заднем плане, оно внезапно пришло ко мне. Поскольку среда выполнения знает тип, все, что мне нужно сделать, это привести к «любому», чтобы обойти проблему компилятора:

var viewController = storyboard.instantiateViewControllerWithIdentifier ("CustomViewControllerID") как любой

Тогда компилятор позволяет мне вызывать любую функцию на моем экземпляре CustomViewController viewcontroller без жалоб, и время выполнения тоже хорошо. Для большей безопасности оберните вызовы методов подкласса в блок if instanceof.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...