gpt4 book ai didi

ios - 在 objective-c 中,当对象本身被分配为它实现的委托(delegate)时,对象如何返回不同的代理对象

转载 作者:可可西里 更新时间:2023-11-01 04:23:26 24 4
gpt4 key购买 nike

我有一个实现各种协议(protocol)(比如 10 种不同协议(protocol))的对象。

例如

@interface MyClass <UITableViewDelegate,UITableViewDataSource,UISearchDisplayDelegate,...>

@end

@implementation

/// a whole bunch of methods for the delegates
@end

为了“清理”这个类中的东西——我创建了帮助类,它封装了与这些委托(delegate)相关的逻辑。

所以现在新的重构类看起来像

// public interface which looks the same
@interface MyClass <UITableViewDelegate,UITableViewDataSource,UISearchDisplayDelegate,...>


@end

// private interface

@interface MyClass ()

// a bunch of objects which implement those methods
@property (nonatomic,strong) MyUITableviewDelegate *tableViewDelegate;
@property (nonatomic,strong) MyUITableviewDataSource *tableViewDelegate;
@property (nonatomic,strong) MySearchDisplayDelegate *searchDisplayDelegate;
// another bunch of objects which answer to the delegates
@end

@implementation
// all the delegate methods were moved out of here to the class which implements the method

@end

现在,当“MyClass”的对象被指定为委托(delegate)时 - 它应该返回“回答”这些委托(delegate)的运行时对象(例如,如果“MyClass "对象被分配为 UITableViewDelegate - MyUITableviewDelegate 应该被分配。

如何做到这一点?我必须覆盖“MyClass”对象中的 forwardInvocation 吗?

最佳答案

您需要实现 forwardingTargetForSelector:

- (id)forwardingTargetForSelector:(SEL)aSelector {
if ([self.tableViewDelegate respondsToSelector:aSelector]) {
return self.tableViewDelegate;
}
// etc

return [super forwardingTargetForSelector:aSelector];
}

关于ios - 在 objective-c 中,当对象本身被分配为它实现的委托(delegate)时,对象如何返回不同的代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com