这是不好的做法吗?
@property (nonatomic, weak) NSObject<TTModalDelegate, TTTimeEntryVCDelegate> *delegate;
我试图通过模拟符合两个协议的委托来测试使用Kiwi框架的东西。但是,看起来这不可能从阅读文档和互联网搜索。我可以创建一个符合单个协议的模拟委托:
NSObject *mockDelegate = [KWMock mockForProtocol:@protocol(TTTimeEntryVCDelegate)];
我想知道Kiwi是否不具备模拟符合多种协议的能力,因为这是不好的做法。如果是这样,为什么这是不好的做法?
答案 0 :(得分:4)
创建符合多种协议的类本身并不是不好的做法;这就是为什么语法存在的原因。但是,正如Apple在their documentation中指出的那样:
如果您发现自己在课堂上采用了大量协议, 这可能表明你需要重构一个过于复杂的类 在多个较小的类中分割必要的行为 责任明确。
理论上也没有要求委托符合多种协议的任何问题。
但是,您应该考虑通过为每个协议创建不同的属性来减少API的限制。考虑dataSource
的{{1}}和delegate
属性。这不仅可以使您的API更加灵活,还可以使用Kiwi测试您的类(它具有无法模拟多个协议的限制)。
就像UITableView
与UITableView
的关系一样,没有什么可以阻止你将两个属性都指向同一个对象。