如何概括代码在没有共享接口的单独对象上调用相同方法



我在xcode 7.3.1中有一个Objective-C项目。

项目代码消耗了一个第三方库,该库具有三个不同的对象ABC。这些对象没有共同的父(Nsobject除外(,也没有实现共同的相关接口或协议。所有三个对象都实现以下方法:

- (id)dataForKey:(NSString *)key;
- (void)setData:(id)value forKey:(NSString *)key;
- (void)removeDataForKey:(NSString *)key;

我的代码在这三个对象上消耗这些方法,并且对它们进行相同的确切操作,例如

BOOL found = NO;
if ([a dataForKey:key] != nil) {
    found = YES;
}
[a removeDataForKey:key];
if ([b dataForKey:key] != nil) {
    found = YES;
}
[b removeDataForKey:key];
if ([c dataForKey:key] != nil) {
    found = YES;
}
[c removeDataForKey:key];
return found;

我想将代码推广到

之类的东西
- (BOOL)removeFromObject:(id)object {
    BOOL found = NO;
    if ([object dataForKey:key] != nil) {
        found = YES;
    }
    [object removeDataForKey:key];
    return found;
}

return [self removeFromObject:a] || [self removeFromObject:b] || [self removeFromObject:c];

如何将三个对象传递到removeFromObject方法中,同时将代码保留为类型安全且尽可能强烈键入(因此,我不喜欢将通用对象传递给removeFromObject方法的解决方案,而不是施放传递的通用通用物对象是三个对象之一(?

您为此使用协议。

@protocol MyProtocol <NSObject>
- (id)dataForKey:(NSString *)key;
- (void)setData:(id)value forKey:(NSString *)key;
- (void)removeDataForKey:(NSString *)key;
@end

因此,您的方法定义变为。

- (BOOL)removeFromObject:(id<MyProtocol>)object;

最新更新