2

我在 Objective-C 中创建了一个适当的委托协议,我正在更新它。其中一个更新需要弃用一种方法,但它在技术上暂时仍然有效。

这是原始的委托方法。请注意,它是可选的,所以它不是必要的方法,这会影响我对它是否应该保持功能的判断。

@protocol MyDelegate <NSObject>

@optional
- (void)requestFailedWithError:(NSError *)error;

@end

它在课堂上被简单明了地用在两个地方。像这样:

if ([self.delegate respondsToSelector:@selector(requestFailedWithError:)]) {
    [self.delegate requestFailedWithError:error];
}

现在我已经更新了。在更新中,看起来更好的选择是根据错误发生的时间将函数划分为唯一的错误返回,因为这种方法的使用增长到两个以上的地方,并且可能有非常不同的响应。这允许消费者忽略特定类型的错误,或者至少在没有大量if语句的情况下以不同的方式处理每个错误。这些是新的委托方法:

@protocol MyDelegate <NSObject>

@optional
- (void)aRequestFailedWithError:(NSError *)error;
- (void)bRequestFailedWithError:(NSError *)error;

- (void)requestFailedWithError:(NSError *)error DEPRECATED_ATTRIBUTE;

@end

在类中,我按预期调用它们,但如果类没有实现较新的方法,我将故障转移到不推荐使用的方法。当然,如果他们没有任何方法,它什么也不做。

if ([self.delegate respondsToSelector:@selector(aRequestFailedWithError:)]) {
    [self.delegate aRequestFailedWithError:error];
} else {
    if ([self.delegate respondsToSelector:@selector(requestFailedWithError:)]) {
        [self.delegate requestFailedWithError:error];
    }
}

在当时这似乎是一个好主意,但我是否只是通过在不推荐使用时保持其功能而使该方法比需要的时间更长?我觉得不推荐使用的方法应该是有用的,只是不鼓励。然后到时候,只需猛拉整个方法。

这看起来像是常见的做法、好主意等吗?欢迎所有评论。只是在处理此类 API 更改时寻找最佳模式。

4

0 回答 0