来自使用泛型的字符串的Swift类

时间:2018-11-20 17:32:35

标签: swift generics reflection

我正在尝试从字符串实例化一个类,但是由于泛型,它无法正常工作。

我有这个课堂宣言:

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专家吗?

非常感谢!

0 个答案:

没有答案