Swift - Ленивая загрузка свойства, которое может быть сделано ноль позже
Я ищу способ ленивой загрузки моей переменной, но я хочу иметь возможность сделать ее нулевой позже, а затем воссоздать ее при получении. Например, в том случае, если в памяти есть предупреждение, я хочу очистить все, что не используется, а затем заново создать его при необходимости позже.
Вот как я это сделаю в Objective-C и мою текущую интерпретацию в Swift. Я не уверен, что он сохраняет переменную для сохранения текущей навигации.
Реализация 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;
}
}
Быстрая реализация
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;
}
}