Swift 中未调用我的委托函数

My delegate function is not being called in Swift

我有一个名为 NoteTakerViewController 的主视图。我有一个带有协议的 weatherGetterController class returns 5 天的天气,带有一个名为 getMyWeather 的协议函数。然而协议函数没有被调用 returns 天气数据到 NoteTakerViewController。我确信我已经与代表正确设置了一切,但也许我没有。

这确实不是 的重复,因为该页面上的解决方案无效。

如果您能提供任何帮助,我们将不胜感激。

这里是相关的代码片段:

我的 weatherGetterController class:

protocol WeatherGetterControllerDelegate {
    func getMyWeather(weather: [FiveDayForecast])
}

class WeatherGetterController: UIViewController, CLLocationManagerDelegate {

var weatherGetterDelegate: WeatherGetterControllerDelegate?

并在WeatherGetterController中调用"getWeather"函数。该行

self.weatherGetterDelegate?.getMyWeather(weather: myForecast)

没有被调用。

func getWeather() {
       ...
       getNetWeather { (fetchedInfo) in

            if let fetchedInfo2 = fetchedInfo {
                //self.updateUI(mainWeather: fetchedInfo2)
                //need to call delegate here
                let myForecast = self.figureFive(weather: fetchedInfo2)
                //return the forecast
                print(myForecast)
                self.weatherGetterDelegate?.getMyWeather(weather: myForecast)

            }

        }

最后是NoteTakerViewController中的函数实现:


class NoteTakerViewController: UIViewController, ..., UITextFieldDelegate, WeatherGetterControllerDelegate

    func getMyWeather(weather: [FiveDayForecast]) {

        print("get my weather")
        print(weather)

    }

调试发现"weatherGetterDelegate"设置为nil,不知道为什么。

谢谢

把它放在 WeatherGetterController 的初始化中

  public weak var weatherGetterDelegate: WeatherGetterControllerDelegate?

  /* if you are not initializing it anywhere else 
  and if you are initializing it anywhere else then make sure you are 
  initializing WeatherGetterController there too and then put delegate   
  of WeatherGetterController to NoteTakerViewController object
   else write the below code */

  var model = NoteTakerViewController()

   public override init() {
      self. weatherGetterDelegate = model
 }

首先,您需要将 WeatherGetterController 设置为 NoteTakerViewController 中的 属性 或您调用它的局部变量,但我将使用第一个选项。

class NoteTakerViewController: UIViewController, ..., WeatherGetterControllerDelegate {
    var weatherGetterController: WeatherGetterController?

    //...

    func viewDidLoad() {
         //....
         weatherGetterController = WeatherGetterController()
         weatherGetterController?.delegate = self
    }

   //And then in some other part of your code you do
   func someFunc() {
       self.weatherGetterController?.getWeather()

我很好奇为什么 WeatherGetterController 被定义为 viewcontroller,真的正确吗?

class WeatherGetterController: UIViewController, CLLocationManagerDelegate {

我个人会删除那部分

lass WeatherGetterController: CLLocationManagerDelegate {