我试图翻译一些本质上是惰性加载变量多次的Objective-C代码。该代码是类似以下内容:加载多次(计算属性?)的Swift惰性变量
-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//...code to build the fetchedResultsController with a new predicate
每当他们想重建fetchedResultsController使用新的谓词,他们只会将其设置为“无”,并调用它,它会用新的谓词重建它。
我正在努力在Swift中完成这个任务。据我所知,Swift懒惰变量在第一次被调用后变成正常变量。这对我造成了问题,因为如果我尝试将我的swift变量设置回零,然后回想起来,它不会重建,但仍然为零。
将我的fetchedResultsController作为懒惰变量载入的工作代码如下。我试图通过增加一个检查来改变它到一个计算属性,如果它的零,并在一个get块内,但没有奏效。有任何想法吗?
lazy var taskController : NSFetchedResultsController? = {
var subtaskRequest = NSFetchRequest(entityName: "Subtasks")
var segIndex = self.segmentedControl.selectedSegmentIndex
subtaskRequest.predicate = NSPredicate(format: "task.category.name == %@", self.segmentedControl.titleForSegmentAtIndex(segIndex)!)
subtaskRequest.sortDescriptors = [NSSortDescriptor(key: "task.englishTitle", ascending: true), NSSortDescriptor(key: "sortOrder", ascending: true)]
let controller = NSFetchedResultsController(fetchRequest: subtaskRequest, managedObjectContext:
self.managedObjectContext!, sectionNameKeyPath: "task.englishTitle", cacheName: nil)
controller.delegate = self
return controller
}()
太棒了。这工作完美 – Unome 2014-11-21 00:03:07
现在开发人员应该做些什么尴尬的事情((。谢谢你很多 – 2015-12-09 14:01:02