【发布时间】:2019-02-22 14:07:22
【问题描述】:
我在 Swift 4 中的协议和委托方面有点挣扎。我将尽我所能描述/向你展示我所拥有的。
主视图控制器:(MVC) 1. 我有主视图控制器类 (MVC)。 VC 具有我想从另一个 ViewController 类 (AVC) 访问的选项属性
class ViewController: UIViewController {
var options: Options?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "To Statements") {
// pass data to next view
let vc = segue.destination
let statementVC = vc as! StatementsViewController
statementVC.coreDataStack = coreDataStack
statementVC.currentPerson = currentPerson
}
}
extension ViewController: FormateStatementDelegate {
// formatting protocol
func addStatementFormat() -> Int {
// here is where I would use the options var that is found in the (MVC)
}
}
语句视图控制器:(SVC) 2.我有一个从(MVC)调用的View Controller类Statement ViewController(SVC)。我正在使用 prepare for segue 函数来设置这个视图控制器(MVC)。
class StatementsViewController: UIViewController{
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if (segue.identifier == "Add Statement") {
// pass data to next view
//print("segue to add statement")
let vc = segue.destination
let addStatementVC = vc as! AddStatementViewController
addStatementVC.coreDataStack = coreDataStack
addStatementVC.personName = currentPerson!.name!
}
}
AddStatement 视图控制器 (AVC) 3. 我有第三个视图控制器类 AddStatement 视图控制器 (AVC),它是从 (SVC) 调用的。我也在使用 prepare for segue func 从(SVC)设置这个视图控制器
这个类有一个我在 (MVC) 中定义的协议。
protocol FormateStatementDelegate {
func func addStatementFormat() -> Intmal
}
class AddStatementViewController: UIViewController{
var delegate FormateStatementDelegate! = nil
}
我感到困惑的是在哪里设置委托属性。我见过的例子似乎在准备 seguer 函数中设置了委托属性。但是由于 (MVC) 是符合 FormateStatementDelegate 协议的协议,我将在哪里以及如何在 (AVC) 中设置委托,因为它们没有父/子关系。我希望我已经以有意义的方式解释了这一点。
【问题讨论】:
-
您是否尝试将委托设置为 self ?正如你在扩展 viewController 中实现的那样?
标签: swift delegates swift-protocols