无法使用协议在segue中传递值:目标是“让”#39;不变

时间:2017-05-03 18:07:32

标签: swift core-data

当我浏览我的应用时,我试图将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

1 个答案:

答案 0 :(得分:1)

除非您将协议声明为class协议,否则Swift会假定它可能由structenum实施。在这些情况下,无法修改分配有let的变量。

要解决此问题,请在class声明中添加protocol

protocol ManagedObjectContextDependent: class {
    var managedObjectContext: NSManagedObjectContext! { get set }
}