[英]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.delegate
為nil
:
self.delegate?.updateScreen()
僅當您的viewWillAppear
在fakeClassThatGetsDataFromFirebase
之前調用時, fakeClassThatGetsDataFromFirebase
根據您的代碼,不應調用它。 什么都fakeClassThatGetsDataFromFirebase()
調用fakeClassThatGetsDataFromFirebase()
,這應該在您的委托方法上調用updateScreen()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.