在Swift中创建运行时已知的类实例

kar*_*ski 10 dynamic instantiation swift

一张图片胜过千言万语,如何将这段代码从Objective-C重写为Swift?

- (id) instanceOfClass: (Class) class withInitializer: (SEL) initializerSelector withObject: (id) object {
    id obj = nil;
    if([class instancesRespondToSelector:initializerSelector]) {
        obj = [[class alloc] performSelector:initializerSelector
                                  withObject:object];
    }
    return obj;
}

id myViewController = [self instanceOfClass:[ViewController class]
                              withInitializer:@selector(initWithObject:)
                                   withObject:@"super-string!"];
NSLog(@"%@", myViewController);
Run Code Online (Sandbox Code Playgroud)

rak*_*hbs 5

这不能纯粹用 Swift 来完成。您只能通过在 Objective C 中创建“按名称创建者的类实例”并从 Swift 调用此代码来实现此目的。

欲了解更多信息,您可以阅读这篇文章。 http://ijoshsmith.com/2014/06/05/instantiating-classes-by-name-in-swift/

并查看这个 github 存储库 https://github.com/ijoshsmith/swift-factory