Могу ли я использовать NSMutableArray / NSArray в качестве типа возврата метода фабрики вместо типа экземпляра? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть подкласс NSObject, называемый Pump. В настоящее время у него есть 6 свойств, которые используются для создания экземпляра Pump - uint8_t speed, double animateTime, float angle, bool operating, uint8_t direction, bool reactivate.

Мой проект предусматривает управление 5 шаговыми двигателями через модуль Bluetooth PSoC 4 и мой iPhone. Каждый степпер не зависит от следующего, поэтому я создаю 5 Pump объектов и возвращаю каждый экземпляр своему MotorViewController.

После создания 5 объектов я сохраняю их в NSArray, чтобы получить доступ к ним и их свойствам в остальной части MotorViewController.

Вот мой текущий процесс создания экземпляра:

// Pump.m

#import "Pump.h"

@implementation Pump

@synthesize speed, animateTime, angle;
@synthesize operating, direction, reactivate;

- (id)initPump:(uint8_t)spd time:(double)t
         angle:(float)ang operating:(bool)op
     direction:(uint8_t)dir reactivate:(bool)r
{
    self = [super init];
    if (self) {
        speed = spd;
        animateTime = t;
        angle = ang;
        operating = op;
        direction = dir;
        reactivate = r;
    }
    return self;
}

+ (instancetype)pump:(uint8_t)spd
{
    Pump *pump = [[Pump alloc] initPump:spd time:0 angle:M_PI
                              operating:false direction:0x00
                             reactivate:false];
    return pump;
}

@end


// MotorViewController.m

#import "MotorViewController.h"

@interface MotorViewController
@property (nonatomic, strong) NSArray *pumps;
@end

@implementation MotorViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // those speed values are for UISlider objects
    self.pumps = @[[Pump pump:(uint8_t)self.salineSlide.value],
                   [Pump pump:(uint8_t)self.sampleSlide.value],
                   [Pump pump:(uint8_t)self.airSlide.value],
                   [Pump pump:(uint8_t)self.wasteSlide.value],
                   [Pump pump:(uint8_t)self.lowlossSlide.value]];

}

Я хочу взять это NSArray *pumps и вставить его в мою Pump модель.

Можно ли сделать так, чтобы мой основной фабричный метод имел тип возврата NSArray или даже NSMutableArray? По-прежнему сохраняйте метод pump:, но когда все сказано и сделано, верните массив.

Это даже считается хорошим дизайном? Весь вклад приветствуется.

EDIT Решение? Вроде одного готового сценария (с MotorViewController, я вызываю pump: и создаю массив со всеми 5 Pump объектами)

pumps является NSMutableArray свойством

@synthesize pumpsArray;

+ (NSMutableArray*)pump:(uint8_t)spd
{
    for (int i = 0; i < 5; i++ {
        Pump *pump = [[Pump alloc] initPump:spd time:0 angle:M_PI
                                  operating:false direction:0x00
                                 reactivate:false];
        [pumpsArray addObject:pump];
    }
    return pumpsArray;
}

...