簡體   English   中英

委托不調用Swift協議方法

[英]Swift protocol method is not being called by the delegate

由於某種原因,未在主View Controller中調用委托方法。 我在這里尋找另一個答案,但沒有對我有幫助。 我在這里錯過了什么嗎? (為簡單起見,我縮短了我的原始代碼)

主視圖控制器:

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)
    }
}

這里正確應用了委托模式,但有一件事可能會出錯:在主View Controller中,您實例化一個新的Parser對象並將其存儲在“dataSource”中:

var dataSource = Parser()

將主視圖控制器設置為其委托時

dataSource.delegate = self

您的主視圖控制器將作為您剛剛創建的新實例的委托進行通知。 這意味着:如果您的Parser()類的實例跳轉到(確保使用調試器,如果實際上確實如此)

loadAndParse()

它可能是另一個對象,所以這個解析器對象沒有實際的委托。 如果這是問題,您可以考慮並插入以便能夠直接與此特定Parser()類進行通信。 希望這可以幫助。

您也可以編輯此行:

從:

dataSource.delegate = self
dataSourse.loadAndParse()

至:

dataSource.delegate = self
dataSource.loadAndParse()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM