[英]Object initialization with protocol and class name in swift
在Ojective-C中,我写道:
id <MyProtocol> object = [[NSClassFromString(@"aClassName") alloc] initWithObject:obj];
我想用Swift写这个。
是否有做同样的事情?还是我脱离了语言范式?
编辑:
这是我的情况。 我在某个地方:
- (instancetype)initWithObject:(NSArray *)array andClassName:(NSString *)className {
self = [self initWithClassName:className];
if(self) {
_members = [[NSMutableArray alloc] init];
for(id obj in array) {
id <MyProtocol> object = [[NSClassFromString(className) alloc] initWithObject:obj];
[_members addObject:object];
};
}
return self;
}
在Swift中,您将需要一个泛型类。
您的类将具有通用类型<T : MyProtocol>
, members
的类型将为[T]
并且您可以使用T
创建新实例。
您无需将className
作为参数传递。
为了在类上调用该初始化器,您需要知道该类支持该初始化器。 因此,让我们创建MyProtocol
协议所需的初始化程序:
protocol MyProtocol {
init(object: AnyObject)
}
然后,您可以执行NSClassFromString
,然后将结果MyProtocol.Type
转换为MyProtocol.Type
(以断言该类是MyProtocol
的子类型),这允许您使用所需的初始化程序:
let object = (NSClassFromString(className) as! MyProtocol.Type)(object: obj)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.