作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我浏览我的应用程序时,我试图将我的 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 假定它可能由 struct
或 enum
实现。在这些情况下,不能修改用 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/
我是一名优秀的程序员,十分优秀!