我如何在 swift3 中将单例类作为委托人

Posted

技术标签:

【中文标题】我如何在 swift3 中将单例类作为委托人【英文标题】:How do i make singleton class as delegator in swift3 【发布时间】:2017-04-22 12:25:37 【问题描述】:

我有一个单例类,如下面的代码 sn-p 所示。

protocol EmpLoginDelegate 
    func empLoginSuccess()
    func empLoginFailed()
         
class CommunicationModule 
    static let sharedInstance = CommunicationModule()
    private init() 
    
    var empLoginDelegate:EmpLoginDelegate?

    func test()
           self.empLoginDelegate?.empLoginSuccess()
     

我的委托类在下面的代码 sn-p 中显示。

extension LoginViewController: EmpLoginDelegate
  func empLoginSuccess()
    wrongAttempts = 0
    loginSuccess = true
    print("EmpLoginIsSuccess")
    performSegue(withIdentifier: "attendanceView", sender: self)

  
  func empLoginFailed()
    wrongAttempts = wrongAttempts + 1
    userNameTextField.shake(count: 3, for: 0.3, withTranslation: 10)
    passwordTextField.shake(count: 3, for: 0.3, withTranslation: 10)
    loginSuccess = false
    loginAlert(alertTitle: "Invalid Credentials", alertMsg: "Your  employee id or password is not correct")
  

当我调用测试函数时,emploginSuccess() 方法不会被调用。测试功能成功执行,没有任何错误。 我认为问题是 empLoginDelegate 未在我的代码中初始化,因此我尝试了可能的方法将其初始化为 self 但对我没有任何作用。 swift3(ios 10.3.1)的单例类中是否有其他方法可以使用委托模式。

【问题讨论】:

您是否尝试通过LoginViewController 内部的方法设置CommunicationModule.sharedInstance.empLoginDelegate = self 感谢 vacawama 的快速响应,它解决了我的问题。 不客气。我将评论移至答案。 委托通常被定义为弱,以避免内存泄漏。也许您应该为此检查“var empLoginDelegate”.. 感谢您的建议,我会更正它。 【参考方案1】:

确保您与单例正确通信。要将LoginViewController 的实例设置为empLoginDelegate,请调用:

CommunicationModule.sharedInstance.empLoginDelegate = self

来自LoginViewController 内部的方法。

【讨论】:

【参考方案2】:

我觉得这个方法不错,对我来说是最好的方法

final class Singleton 

    // Can't init is singleton
    private init()  

    //MARK: Shared Instance

    static let shared: Singleton = Singleton()


【讨论】:

以上是关于我如何在 swift3 中将单例类作为委托人的主要内容,如果未能解决你的问题,请参考以下文章

如何快速创建单例类? [复制]

如何在 Swift 中实现单例类

如何在分布式环境中处理单例类

如何从视图/单例类保存/加载属性

如何在整个应用程序中创建和注入用户特定的单例类?

单例类可以有非单例依赖吗? [复制]