Uno*_*ome 15 lazy-loading objective-c ios swift
我正在尝试翻译一些基本上懒惰加载变量的Objective-C代码.代码类似于以下内容:
-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//...code to build the fetchedResultsController with a new predicate
Run Code Online (Sandbox Code Playgroud)
每当他们想要重建fetchedResultsController以使用新的谓词时,他们只需将其设置为"nil"并调用它,它将使用新的谓词重建它.
我正在努力在Swift中完成同样的任务.据我所知,Swift懒惰变量在第一次被调用后成为正常变量.这对我来说是个问题,因为如果我尝试将我的swift变量设置为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
}()
Run Code Online (Sandbox Code Playgroud)
Con*_*nor 22
您可以使用由可选变量支持的计算属性创建类似于Objective-C方法的内容.
var _fetchedResultsController: NSFetchedResultsController?
var fetchedResultsController: NSFetchedResultsController {
get {
if _fetchedResultsController != nil {
return _fetchedResultsController!
}
//create the fetched results controller...
return _fetchedResultsController!
}
}
Run Code Online (Sandbox Code Playgroud)
lazy只是实现了一个非常具体的memoization模式.它并不像你有时喜欢的那样神奇.您可以非常轻松地实现自己的模式以匹配您的ObjC代码.
只需创建一个包含实际值的第二个私有可选属性.创建一个标准(非惰性)计算属性,检查私有属性是否为nil,如果为零,则更新它.
这与ObjC系统非常相似.在ObjC中,你有两个"东西",一个叫_fetchedResultsController,另一个叫self.fetchedResultsController.在Swift中你会有两件事,一件叫self.fetchedResultsController,另一件叫self._cachedFetchedResultsController(或其他).
| 归档时间: |
|
| 查看次数: |
2573 次 |
| 最近记录: |