1

我正在尝试在一个小型 objc 项目中遵循 Viper 模式。我得到每个部分的不同角色,没有特别的问题。但是,我遇到问题的部分是当我尝试将我的 tableview 的委托/数据源移动到另一个文件时,因为我读到这是应该这样做的。我关注了那个帖子:iOS using VIPER with UITableView但我无法编译。

这里的问题是我不知道如何在 Objc 中进行扩展。我尝试了很多语法,但都没有奏效。我如何(通过示例)在 VIPER“MyViewController.m/h”和“MyTableViewController.m/h”中正确拥有“MyTableViewController”是“MyViewController”的扩展?这意味着我们将<UITableViewDelegate>在“MyViewController.h”中看到。

非常感谢你的帮助。这可能是一个多余的问题,但我没有为我的扩展问题找到明确的答案(如果有的话)。

4

1 回答 1

1

感谢上面评论中的@Kamil.S,我设法在苹果文档中找到了我想要的东西!实际上,Objc 中的扩展称为“类别”。我几乎做了我在原始问题中链接的帖子上写的内容。

因此,如果有人需要,这是一个简化的示例:

视图控制器.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property (strong, nonatomic) id<ViewToPresenterProtocol> presenter;
@end

视图控制器.m

#import "ViewController.h"

@implementation ViewController
// All my code, ViewDidLoad, and so on
@end

集合视图控制器.h

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface ViewController (CollectionViewController) <UICollectionViewDelegate, UICollectionViewDataSource>
@end

集合视图控制器.m

#import <UIKit/UIKit.h>
#import "CollectionViewController.h"
#import "ViewController.h"

@implementation ViewController (CollectionViewController)

- (NSInteger)collectionView:(nonnull UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return [self.presenter getNumberOfItems];
}

// ...
// Here add others functions for CollectionView Delegate/Datasource protocols

@end
于 2020-09-06T20:02:02.360 回答