Я немного борюсь с протоколами и делегатами в Swift 4. Я сделаю все возможное, чтобы описать / показать вам, что у меня есть.
Контроллер основного вида: (MVC) 1. У меня есть класс Main Viewcontroller (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)
}
}
Statement ViewController: (SVC) 2. У меня есть оператор класса View ControllerViewController (SVC), который вызывается из (MVC).Я использую подготовку для segue func, чтобы настроить этот контроллер представления для (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 View Controller (AVC) 3. У меня есть третий класс View Controller AddStatement ViewКонтроллер (AVC), который вызывается из (SVC).Я также использую подготовку для segue func, чтобы настроить этот контроллер представления из (SVC)
Этот класс имеет протокол, который я определяю в (MVC).
protocol FormateStatementDelegate {
func func addStatementFormat() -> Intmal
}
class AddStatementViewController: UIViewController{
var delegate FormateStatementDelegate! = nil
}
Где яя запутался, где установить свойство делегата.Кажется, что примеры, которые я видел, устанавливают свойство делегата при подготовке к функции seguer.Но так как (MVC) является тем, который соответствует протоколу FormateStatementDelegate, где и как я должен установить делегата в (AVC), так как они не имеют отношения родитель / потомок.Надеюсь, я объяснил это осмысленно.