Не так хорошо в быстрой, поэтому отправляю код с объективом c. Я думаю, вы можете это перевести. Вот основной класс пользователя, который содержит свойства.
заголовочный файл здесь
#import <Foundation/Foundation.h>
@interface User : NSObject
@property (nonatomic, strong) NSString *UserID;
@property (nonatomic, strong) NSString *Password;
@property (nonatomic, strong) NSString *UserName;
@property (nonatomic, strong) NSString *Email;
- (instancetype)initWithData:(NSDictionary*)dicData;
@end
.m файл здесь
#import "User.h"
@implementation User
@synthesize UserID;
@synthesize Password;
@synthesize UserName;
@synthesize Email;
- (instancetype)init
{
self = [super init];
if (self) {
UserID = @"";
Password = @"";
UserName = @"";
Email = @"";
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.UserID forKey:@"UserID"];
[encoder encodeObject:self.Password forKey:@"Password"];
[encoder encodeObject:self.UserName forKey:@"UserName"];
[encoder encodeObject:self.Email forKey:@"Email"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.UserID = [decoder decodeObjectForKey:@"UserID"];
self.Password = [decoder decodeObjectForKey:@"Password"];
self.UserName = [decoder decodeObjectForKey:@"UserName"];
self.Email = [decoder decodeObjectForKey:@"Email"];
}
return self;
}
- (instancetype)initWithData:(NSDictionary*)dicData
{
self = [super init];
if (self) {
UserID = [dicData valueForKey:@"userid"];
Password = [dicData valueForKey:@"password"];
UserName = [dicData valueForKey:@"username"];
Email = [dicData valueForKey:@"email"];
}
return self;
}
- (void)dealloc
{
UserID= nil;
Password = nil;
UserName= nil;
Email= nil;
}
@end
И ваш Singleton класс для хранения этого класса объект идет следующим образом.
заголовочных файл здесь
#import <Foundation/Foundation.h>
#import "User.h"
@interface AppDefaults : NSObject
@property (nonatomic, strong) User *currentUser;
+ (AppDefaults *)defaultInstance;
@end
и.м файл здесь
#import AppDefaults.h
@implementation AppDefaults
@synthesize currentUser;
static AppDefaults *staticInstance;
+ (AppDefaults *)defaultInstance{
static dispatch_once_t once;
dispatch_once(&once, ^{
staticInstance=[[self alloc] init];
});
return staticInstance;
}
- (instancetype)init
{
self = [super init];
if (self) {
currentUser = [[User alloc]init];
}
return self;
}
@end
Теперь вам нужно вызвать класс, как это каждый раз, когда
[AppDefaults defaultInstance].currentUser.Email = @"[email protected]";
и на первых порах, когда приложение открывает вам необходимо назначить пользователю класса дефолтов
[AppDefaults defaultInstance].currentUser = [[User alloc]init];
также, если у вас есть данные для пользователя, вы можете передать их и инициализировать пользовательский класс, а затем вы можете назначить объект пользователя классу по умолчанию. Это будет нести ценность во всем приложении. Единственное, что нужно - получить данные пользователя даже после того, как приложение будет убито. Вы должны сохранить пользователей декодированного объекта в NSUserDefaults, чтобы получить его в следующий раз, когда приложение запустится. Вот код идет
хранить
User *user = [[User alloc]initWithData:yourDataDictionary];
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:user];
[[NSUserDefaults standardUserDefaults] setObject:myEncodedObject forKey:@"loggedUser"];
и для получения и хранения
NSData *myEncodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"loggedUser" ];
User *obj = (User *)[NSKeyedUnarchiver unarchiveObjectWithData: myEncodedObject];
[AppDefaults defaultInstance].currentUser = obj;
К сожалению я не смог перевести его в стрижа.
Возможный дубликат [Как вы делитесь данными между диспетчерами и другими объектами в Swift?] (Http://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers -and-other-objects-in-swift) – nhgrif