В Objective-C, это работало хорошо для Singleton in Interface BuilderИспользование Singleton в Interface Builder с Swift
static Universe *instance;
+ (Universe *)instance {
return instance;
}
+ (id)hiddenAlloc {
return [super alloc];
}
+ (id)alloc {
return [self instance];
}
+ (void)initialize {
static BOOL initialized = NO;
if (!initialized) {
initialized = YES;
instance = [[Universe hiddenAlloc] init];
}
}
и из-за перезапись Alloc, IB будет забрать только экземпляр Universe
Возможно ли это в Свифт? [Я застрял с моим решением, которое составляет here on Github.]
Нет, потому что в Swift нет такой вещи, как 'alloc'. Вы управляете фундаментальным управлением памятью, и Swift не позволит вам это сделать. Если это важно для вас, почему бы не написать эту часть кода в Objective-C? – matt
@matt Спасибо за это, согласился. Я пытаюсь представить гибрид, где singleton-ness находится в Objective-C, а затем «Вселенная» является подклассом Swift. Мне кажется, что это невозможно, поскольку «initialize» должен быть привязан к определенному классу, верно? –
Нет, 'initialize' можно вызвать для подклассов. Вот почему хороший 'initialize' всегда проверяет, на каком классе это на самом деле. – matt