当我浏览我的应用时,我试图将NSManagedObjectContext
传递给我的孩子ViewControllers
(即依赖注入)
我创建了一个协议ManagedObjectContextDependent
protocol ManagedObjectContextDependent {
var managedObjectContext: NSManagedObjectContext! { get set }
}
我的自定义ViewControllers
采用该协议。例如:
class MyTableViewController: UITableViewController, ManagedObjectContextDependent {
var managedObjectContext: NSManagedObjectContext!
}
然后在prepareForSeqgue
我传递它。这很好。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? MyTableViewController {
destinationVC.managedObjectContext = self.managedObjectContext
}
}
但如果我尝试将目的地转换为ManagedObjectContextDependent
,我就不能:
无法分配到媒体资源:' destinationVC'是一个“让...”恒定
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? ManagedObjectContextDependent {
destinationVC.managedObjectContext = self.managedObjectContext
}
}
我试图重构此代码以使其通用 - 任何两个ManagedObjectDependent
类都可以传递一个segue
答案 0 :(得分:1)
除非您将协议声明为class
协议,否则Swift会假定它可能由struct
或enum
实施。在这些情况下,无法修改分配有let
的变量。
要解决此问题,请在class
声明中添加protocol
:
protocol ManagedObjectContextDependent: class {
var managedObjectContext: NSManagedObjectContext! { get set }
}