【发布时间】:2015-01-08 11:28:26
【问题描述】:
一张图抵千言,如何将这段代码从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);
【问题讨论】:
-
难点不在于动态类,而在于动态选择器。可以在 Swift 中使用固定初始化程序创建具有动态类的实例。然而,在 Swift 中使用动态选择器调用方法(或本例中的初始化器)通常是不可能的,因为它从根本上是不安全的(选择器不携带被调用方法的类型信息)。
标签: swift dynamic instantiation