我正在尝试从字符串实例化一个类,但是由于泛型,它无法正常工作。
我有这个课堂宣言:
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专家吗?
非常感谢!