代码之家  ›  专栏  ›  技术社区  ›  bohdankoshyrets

委托未调用Swift协议方法

  •  4
  • bohdankoshyrets  · 技术社区  · 7 年前

    由于某些原因,委托方法没有在主视图控制器中调用。我在这里寻找另一个答案,但没有一个对我有帮助。我在这里遗漏了什么吗?(为了简单起见,我缩短了原始代码)

    主视图控制器:

    class VC: ParserDelegate {
        var dataSource = Parser()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            dataSource.delegate = self
            dataSourse.loadAndParse()
        }
    
        func didReceiveDataUpdates(store: [WeatherModel]) {
            print("Delegate method triggered.")
        }
    
    }
    

    protocol ParserDelegate: class {
        func didReceiveDataUpdates(store: [WeatherModel])
    }
    

    我的代理类:

    class Parser {
        weak var delegate: ParserDelegate?
    
        func loadAndParse() {
            var store = [WeatherModel]()
            // Doing something
    
            delegate?.didReceiveDataUpdates(store: store)
        }
    }
    
    2 回复  |  直到 7 年前
        1
  •  5
  •   Alienbash    7 年前

    委托模式在这里得到了正确应用,但有一点可能会出错:在主视图控制器中,您正在实例化一个新的解析器对象,并将其存储在数据源中:

    var dataSource = Parser()
    

    当将主视图控制器设置为其代理时

    dataSource.delegate = self
    

    loadAndParse()
    

        2
  •  -1
  •   סטנלי גרונן Abhishek Singh    6 年前

    您也可以编辑此行:

    发件人:

    dataSource.delegate = self
    dataSourse.loadAndParse()
    

    收件人:

    dataSource.delegate = self
    dataSource.loadAndParse()