Картинка стоит тысячи слов, как переписать этот код с Objective-C на Swift?Создать экземпляр класса, известного во время выполнения в 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);
Сложность заключается не в динамическом классе, а в динамическом селекторе. В Swift можно создавать экземпляры с динамическим классом с фиксированным инициализатором. Тем не менее, в Swift вообще невозможно использовать методы вызова (или инициализаторы в этом случае) с динамическим селектором, поскольку он принципиально небезопасен (селектор не несет информацию типа вызываемого метода). – newacct