我試圖翻譯一些本質上是惰性加載變量多次的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