0
我有一個BaseViewController
這是由我的應用程序中的所有其他視圖控制器的子類。我在這裏有很強的參考週期嗎?
我有一些狀態變量必須在所有視圖控制器中保持一致,所以我打算編寫代碼以在BaseViewController
中傳遞一次來回傳遞這些狀態變量。 爲此,我爲前鋒傳球提供幫手功能pushStatefulViewControllerWithIdentifier()
,使用StatePassBackDelegate
作爲後傳球。
import UIKit
class BaseViewController: UIViewController, StatePassBackDelegate {
class State {
var connected = false
var loggedIn = false
}
var state = State()
weak var delegate: StatePassBackDelegate? = nil
// MARK: Lifecycle
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
if self.isMovingFromParentViewController() == true {
delegate?.passBackState(state)
}
}
// MARK: StatePassBackDelegate functions
func passBackState(state: AnyObject) {
self.state = state as! State
}
// MARK: Helpers
final func pushStatefulViewControllerWithIdentifier(identifier: String) {
let vc = storyboard?.instantiateViewControllerWithIdentifier(identifier) as! BaseViewController
vc.state = state
vc.delegate = self
navigationController!.pushViewController(vc, animated: true)
}
}
protocol StatePassBackDelegate: class {
func passBackState(state: AnyObject)
}
- 我是否有很強的參考週期嗎?
- 我應該在這裏使用單例模式嗎?
謝謝。你能否在這個特定的用例中提出一個單例的替代方案? – Zaxter
太棒了!感謝您花時間寫這篇文章!非常感激。 – Zaxter