簡體   English   中英

從Swift 2.3升級到Swift 3.0后類協議不起作用

[英]Class protocols not working after updating from Swift 2.3 to Swift 3.0

我有一個非常基本的用戶類,負責從Firebase獲取用戶數據並在需要時更新當前屏幕,一切正常,直到決定將我的項目更新為Swift 3.0。

這是用戶類

    @objc protocol userClassProtocol {
        func updateScreen() 
        @objc optional func sucessUnlockedCategory() 
    }

class User {
   static let sharedInstance = User()
   internal var delegate : userClassProtocol?

   func fakeClassThatGetsDataFromFirebase() {
       //Got data
       print("Has new data")
       self.delegate?.updateScreen()
   }
}

這是ViewController:

class FirstViewController: UIViewController, userClassProtocol {
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        print("View will load")
        User.sharedInstance.delegate = self
    }

    func updateScreen() {
        print("Screen is going to update")
        //Do stuff here
    }
}

我從中獲得的日志是:是否將出現新的數據視圖

但是視圖控制器中的函數updateScreen()永遠不會被調用。 Xcode指出沒有錯誤。

看來這只是方法調用時間的問題。

fakeClassThatGetsDataFromFirebase會調用您的fakeClassThatGetsDataFromFirebase方法,此時尚未設置您的委托。 所以在調用時self.delegatenil

self.delegate?.updateScreen()

僅當您的viewWillAppearfakeClassThatGetsDataFromFirebase之前調用時, fakeClassThatGetsDataFromFirebase

根據您的代碼,不應調用它。 什么都fakeClassThatGetsDataFromFirebase()調用fakeClassThatGetsDataFromFirebase() ,這應該在您的委托方法上調用updateScreen()

暫無
暫無

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

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