Swift класс из строки, которая использует дженерики - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать экземпляр класса из строки, но он не работает из-за обобщений.

У меня есть объявление этого класса:

class PollSummaryView<T: PollSummary>: UIView {}

А затем много подклассов:

class TextPollSummaryView: PollSummaryView<TextPollSummary> {}

class ChartingPollSummaryView: PollSummaryView<ChartPollSummary> {}

Затем я пытаюсь создать экземпляр этого:

let contentClassName = "\(summary.poll.type.rawValue)PollSummaryView"
let contentClass = classFromString(contentClassName) as? PollSummaryView.Type

Но это ноль.Также пробовал это с теми же результатами:

let contentClassName = "\(summary.poll.type.rawValue)PollSummaryView"
let contentClass = classFromString(contentClassName) as? PollSummaryView<PollSummary>.Type

На всякий случай, это фрагмент classFromString:

func classFromString(_ className: String) -> AnyClass? {
    let namespace = Bundle.main.infoDictionary!["CFBundleExecutable"] as! String;
    let cls: AnyClass? = NSClassFromString("\(namespace).\(className)");
    return cls;
}

В Java Android я делаю это:

  public static @Nullable
    <T extends PollSummaryView> T createView(PollSummary summary, Context context) {
        try {
            String simpleClassName = StringUtils.capitalize(summary.getPoll().getType().name()).concat("PollSummaryView");
            String className = String.format("%s.%s", getPackage(), simpleClassName);
            Class<? extends PollSummaryView> clazz = Class.forName(className).asSubclass(PollSummaryView.class);
            return (T) clazz.getConstructor(summary.getClass(), Context.class).newInstance(summary, context);
        } catch (Exception e) {
            return null;
        }
    }

И это работает, но предупреждает о неконтролируемом приведении.

Есть ли там какой-нибудь эксперт по Swift?

Большое спасибо!

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