Rápido - Preguiçoso carregando uma propriedade que pode ser feita mais tarde
Estou procurando uma maneira de carregar preguiçosamente minha variável, mas quero poder torná-la nula mais tarde e depois recriá-la. Por exemplo, no caso de um aviso de memória, desejo limpar qualquer coisa que não seja usada e, em seguida, recriá-lo quando necessário novamente mais tarde.
Aqui está como eu faria isso em Objective-C e minha interpretação atual em rápida. Não sei se ele preserva a variável para manter a navegação atual.
Implementação de Obj-C
@property (strong, nonatomic, readwrite) UINavigationController *navController;
...
- (UINavigationController *)navController {
if (!_navController) {
UIStoryboard *tempStoryboard = [UIStoryboard storyboardWithName:@"SomeStoryboard" bundle:nil];
_navController = [tempStoryboard instantiateInitialViewController];
}
return _navController;
}
...
- (void)didReceiveMemoryWarning
{
if (![self.centerView isEqual:_navController]) {
_navController = nil;
}
}
Implementação rápida
var navController :UINavigationController? {
get {
// There is no assignment to the a variable and I can't check if the current value is nil or it recalls the get method and hence re-create it if it is nil.
let tempStoryboard = UIStoryboard(name: "Image", bundle: nil);
let tempNavController: AnyObject = tempStoryboard.instantiateInitialViewController();
return tempNavController as? UINavigationController;
}
}
...
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
if (!self.centerPanel.isEqual(navController)) {
self.navController = nil;
}
}