繁体   English   中英

快速使用协议和类名进行对象初始化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM