Tôi đang cố dịch một số mã Objective-C về cơ bản là tải xuống biến nhiều lần. Mã này là tương tự như sau:Biến lười biếng nhanh chóng tải nhiều hơn một lần (Thuộc tính tính?)
-(NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//...code to build the fetchedResultsController with a new predicate
Bất cứ khi nào họ muốn xây dựng lại các fetchedResultsController sử dụng một vị mới, họ sẽ chỉ đặt nó là "con số không" và gọi nó, và nó sẽ xây dựng lại nó với một vị mới .
Tôi đang cố gắng thực hiện tác vụ tương tự này trong Swift. Theo như tôi có thể nói, biến lười biếng Swift trở thành biến bình thường sau khi chúng được gọi lần đầu tiên. Điều này đang gây ra vấn đề cho tôi bởi vì nếu tôi cố gắng đặt biến nhanh chóng của tôi trở lại nil, và nhớ lại nó, nó không xây dựng lại nhưng vẫn là không.
Mã hoạt động để tải fetchedResultsController của tôi dưới dạng biến thể lười biếng bên dưới. Tôi đã thử thay đổi nó thành một thuộc tính tính bằng cách thêm một kiểm tra nếu nil của nó và có nó trong một khối nhận được, nhưng điều đó đã không làm việc. Bất kỳ ý tưởng?
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
}()
Tuyệt vời. Điều đó làm việc hoàn hảo – Unome
những gì một điều khó khăn nên bây giờ phát triển làm ((Cảm ơn bạn rất nhiều –