Статическая переменная, метод или синглтон?
Мне было интересно, как получить доступ к "статическим" переменным из модели из разных ViewControllers. Должен ли я пойти на:
- статические переменные (если да, то как?)
- статический метод
- синглтон + метод
- синглтон + переменная (пользовательские геттеры)
#import "CategoryModel.h"
@implementation CategoryModel
-(NSArray*) allSelected {
return [[NSArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:SELECTEDCATEGORIES_DEFAULTSKEY]];
}
-(NSString*) allSelectedAsUrlParams {
NSMutableString *categoryList = [NSMutableString string];
for (NSArray *category in self.allSelected) {
[categoryList appendString:[category valueForKey:@"value"]];
if(![[self.allSelected lastObject] isEqual:category]) {
[categoryList appendString:@","];
}
}
return categoryList;
}
@end
*Редактировать (работает) *
// header
#import <Foundation/Foundation.h>
@interface CategoryModel : NSObject
+ (NSString*)allSelectedAsUrlParams;
@end
// implementation
#import "CategoryModel.h"
@implementation CategoryModel
+ (NSString*)allSelectedAsUrlParams {
return @"somethingGreat";
}
@end
// How to use
CategoryModel.allSelectedAsUrlParams
1 ответ
Это действительно будет вопрос архитектурных предпочтений, но если более чем одному классу понадобятся статические переменные, это один из подходов:
Constants.h
extern BOOL const TEST_MODE;
extern NSString * const SOME_STRING;
Constants.m
BOOL const TEST_MODE = YES;
NSString * const SOME_STRING = @"SomeString";
В качестве альтернативы, вы можете просто добавить extern NSString * const SOME_STRING;
к заголовку класса, к которому он относится (и соответствующий NSString * const SOME_STRING = @"SomeString";
в.m), а затем вызвать эту переменную напрямую, импортировав заголовок класса с нужной вам константой и используя SOME_STRING
чтобы получить на это.