gpt4 book ai didi

swift - 无法使用协议(protocol) : destination is a 'let' constant 在 segue 中传递值

转载 作者:行者123 更新时间:2023-11-28 15:40:25 26 4
gpt4 key购买 nike

当我浏览我的应用程序时,我试图将我的 NSManagedObjectContext 传递给我的 child ViewControllers(即依赖注入(inject))

我创建了一个协议(protocol) ManagedObjectContextDependent

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

我的自定义 ViewControllers 采用该协议(protocol)。例如:

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”是一个“let”常量

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let destinationVC = segue.destination as? ManagedObjectContextDependent {
destinationVC.managedObjectContext = self.managedObjectContext
}
}

我正在尝试重构此代码以使其通用——任何两个 ManagedObjectDependent 类都可以传递一个 segue

最佳答案

除非您将协议(protocol)声明为 class 协议(protocol),否则 Swift 假定它可能由 structenum 实现。在这些情况下,不能修改用 let 赋值的变量。

要解决此问题,请将 class 添加到您的 protocol 声明中:

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

关于swift - 无法使用协议(protocol) : destination is a 'let' constant 在 segue 中传递值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43767159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com