我正在尝试在Objective-C
中实现一个简单的观察者/侦听器模式。
我有两个NSMutableArray
,其中一个正在监听不同的类。这些被设置为通用类型(id
)。我也有一个数组,其中包含不同类的名称(如NSStrings
)。
我如何才能采用泛型类型,将其转换回原始类并向该类发送消息?
我已经尝试过类似的方法,但是没有成功:
// _observers_type contains the names for the classes, _observers are the generic types.
- (void)notifyObservers;
{
for (int i = 0; i < [_observers count]; i++) {
NSString *classNameStr = [_observers_type objectAtIndex:i];
Class theClass = NSClassFromString(classNameStr);
(theClass)[[_observers objectAtIndex:i] triggerNotify];
}
}
还要注意,这些方法不是实例方法。我想用这种模式更新视图等。
最佳答案
试试这个代码
for (int i = 0; i < [_observers count]; i++) {
[[_observers objectAtIndex:i] performSelector:@selector(triggerNotify)];
}
theClass是在运行时评估的,因此对于编译器,此行
(theClass)[[_observers objectAtIndex:i] triggerNotify];
具有与此相同的信息
[[_observers objectAtIndex:i] triggerNotify];
它将生成错误“选择器'triggerNotify'的未知实例方法”。
叫这个
[[_observers objectAtIndex:i] performSelector:@selector(triggerNotify)];
向接收者发送相同的消息,但不询问编译器是否可能。
关于ios - 泛型转换为类。在Objective-c中实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21893177/