gpt4 book ai didi

ios - 如何在一个类中实现两个相同类型的委托(delegate)?

转载 作者:行者123 更新时间:2023-12-01 18:48:09 25 4
gpt4 key购买 nike

我正在为这种情况寻找好的模式。让我们与委托(delegate)一起上课:

@protocol MyDelegate
-(void) someEvent;
@end

@interface MyServiceClass
@property (nonatomic,weak) id<MyDelegate> delegate;
@end

我们有这个类的两个实例。例如 serviceObject1 和 serviceObject2。现在在我们的 Controller 中,我们希望接收来自两个实例的事件:
-(void) registerDelegates {
serviceObject1.delegate=self;
serviceObject2.delegate=self;
}

-(void) someEvent {
// do something
}

一切都很好,除了来自两个实例的事件将被抛出到一个 someEvent 方法。对我来说,将事件从 serviceClass1 和 serviceClass2 分离到不同的方法会更舒服。

我看到了三种方法,但不喜欢其中任何一种:
  • 将调用者的实例作为 someEvent 的参数发送,并检查此事件来自哪个实例并重定向到适当的方法。
  • 在我的 Controller 中创建两个假对象并将它们注册为 service1Class 的委托(delegate)。并从此对象调用我的 Controller 中的不同方法。
  • 使用匿名 block 而不是委托(delegate)。不错的决定,但我不知道如何取消注册。

  • 可能存在我错过的另一个解决方案吗?

    最佳答案

    处理这种情况的方法是将 MyServiceClass 实例作为方法参数之一传递,基本上就是您为 #1 编写的内容。

    这就是 Apple 的做法,也是一种标准做法。

    @protocol MyDelegate
    -(void) someEventFromService:(MyServiceClass *serviceClass);
    @end

    关于ios - 如何在一个类中实现两个相同类型的委托(delegate)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33318557/

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