IOS – 委托与通知
想对以下架构有您的看法:
在我的应用程序中,我有一个处理异步登录的静态类(LoginManager)。 登录阶段完成后,应用程序应响应并转换到另一个状态。
我有2个实施建议
-
使用代表:
import Foundation protocol LoginManagerDelegate{ func onLogin(result:AnyObject) } class LoginManager { struct Wrapper { static var delegate:LoginManagerDelegate? } class func userDidLogin(result){ Wrapper.delegate?.onLogin(result) } }
-
使用通知:
import Foundation class LoginManager { class func userDidLogin(result){ NSNotificationCenter.defaultCenter().postNotificationName("onLogin", object: result) } }
问 :什么是最好的方法?
如果
func onLogin(结果:AnyObject)
只在一个类中实现,我会与代表一起使用。 更适合1对1的关系 。
如果它是1到n的关系 ,我会选择通知 。
我不喜欢依赖Notification(个人品味),因此我通常在AppDelegate中处理登录/注销转换,这允许我使用Delegate模式。
对于
- 代表/协议
当您想要从当前视图控制器更新或完成上一个控制器中的任何过程时,通常会使用它。 因此,如果要更新先前视图控制器中的值,则最好使用委托/协议。
所以它基本上是一对一的关系。
- 通知
当您想要从任何其他viewcontroller更新视图控制器中的值时,通常会使用它。 所以它基本上是一对一的关系。
因此请根据您的要求使用此类型。
也许这会对你有所帮助。
3:回调函数。 (比如1,但没有专门为此目的宣布协议的方法)。
class LoginManager { // using this singleton makes me feel dirty struct Wrapper { // this AnyObject too... static var callback: ((result: AnyObject)->())? } class func userDidLogin(result){ Wrapper.callback?(result) } }
我会选择代理实现完成块。 顺便说一句,作为一种良好的做法,不应将NSNotification用于过渡。 更好地使用代表。