【发布时间】:2015-01-19 00:50:34
【问题描述】:
我正在尝试翻译一些本质上是延迟加载变量多次的 Objective-C 代码。代码类似如下:
-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//...code to build the fetchedResultsController with a new predicate
每当他们想重建 fetchedResultsController 以使用新的谓词时,他们只需将其设置为“nil”并调用它,它就会用新的谓词重建它。
我正在努力在 Swift 中完成同样的任务。据我所知,Swift 惰性变量在第一次被调用后就变成了普通变量。这给我带来了问题,因为如果我尝试将我的 swift 变量设置回 nil,并重新调用它,它不会重建,而是保持为 nil。
将我的 fetchedResultsController 作为惰性变量加载的工作代码如下。我已经尝试通过添加一个检查它是否为 nil 并将其包含在一个 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
}()
【问题讨论】:
标签: ios objective-c swift lazy-loading