使用 swift 中的协议和 class 名称的对象初始化

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 中,您将需要一个通用的 class。

您 class 将具有泛型类型 <T : MyProtocol>members 将属于 [T] 类型,您可以使用 T 创建新实例。

您不需要将 className 作为参数传递。

为了在 class 上调用该初始化程序,您需要知道 class 支持该初始化程序。因此,让我们创建 MyProtocol 协议所需的初始化程序:

protocol MyProtocol {
  init(object: AnyObject)
}

然后你可以只做 NSClassFromString,然后将结果转换为 MyProtocol.Type(断言 class 是 MyProtocol 的子类型),这允许你使用你想要的初始化器:

let object = (NSClassFromString(className) as! MyProtocol.Type)(object: obj)